c# - NuGet Msbuild Pack 与非 SDK 项目
问题描述
我有一个“旧式”.NET 框架项目,其中包括 nuget 引用和其他项目引用。现在我切换到 PackageReference 格式(删除了 packages.config)。我想为我的项目创建一个 NuGet 包。所以我添加了对“NuGet.Build.Tasks.Pack”包的引用并使用了 MSBUILD 包目标。首先,它看起来像预期的那样,生成的包包含我所有的引用和相应的 NuGet 引用。现在我有一个问题,我也使用一个项目来项目参考:
<ProjectReference Include="..\Wrapper\MyWrapper\MyWrapper.csproj">
<Project>{6b9a7dd0-b93f-3a5e-8fdf-99d0bf811652}</Project>
<Name>MyWrapper</Name>
</ProjectReference>
基于 nuget 文档 - 供参考:
默认情况下,项目到项目的引用被视为 nuget 包引用
但我希望将这个项目引用打包到我的包中,而不是“nuget 包引用”。我发现使用的帖子
私人资产=“全部”
项目引用可以解决问题,但将此属性添加到项目引用节点不会改变任何内容。任何帮助都会很棒!
解决方案
我想你错过了一些东西。您PrivateAssets="all"
为ProjectReference
. 实际上,nuget 不会将引用的项目视为 nuget 依赖项,并且 nuget 也不会将其程序集 dll 打包到 nupkg 中。您需要其他节点。
试试这些指导:
假设您所有的 lib 项目都是针对net framework 4.7.2
.
1)添加主项目PrivateAssets="all"
的xxx.csproj
文件。
<ProjectReference Include="..\Wrapper\MyWrapper\MyWrapper.csproj">
<Project>{6b9a7dd0-b93f-3a5e-8fdf-99d0bf811652}</Project>
<Name>MyWrapper</Name>
<PrivateAssets>All</PrivateAssets>
</ProjectReference>
2)还要在主项目的文件中添加这些节点,xxx.csproj
以将程序集 dll 打包到 nupkg 中:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" />
</ItemGroup>
</Target>
3)然后使用此命令打包项目:
msbuild -t:rebuild,pack -p:PackageOutputPath=xxx\xxx -p:Authors="xxx" -p:Version="x.x.x"
注意:在我这边,主项目调用Mod
并且它引用了一个名为Mod1
. 当我完成打包过程后,您可以在 nupkg.xml 中看到这些。
它将引用的 dll 打包为 lib 而不是 nuget 包。
推荐阅读
- python - 如何自动重新启动此代码?
- eloquent - 使用 Slim 框架在 Eloquent 中访问 $app 或 $request
- mqtt - Fiware MQTT IoT Agent:API Key 中需要有斜线
- wordpress - 如何修复文件和文件夹的 mac os 权限与我们的托管服务器不兼容
- r - 你知道为什么在尝试 pairw.anova 时 dims [product 0] 与 object [1] 的长度不匹配吗
- laravel - 如何从 laravel nova 的资源列表中删除所有复选框?
- google-cloud-platform - 已弃用产品或服务的公告
- angular - 无法在 localhost 上的 docker 容器之间进行通信
- python - 数数 数据框中一列的每一行中的标记
- qt - 如何从另一个线程正确停止 QTimer