我有一个看起来像这样的解决方案。
我想为 ProjA、ProjB 和 ProjC 生成单独的 nuget 包,我希望这个过程检测上面显示的 ProjC 中的项目引用,并将它们转换为 nuspec 文件中的 nuget 依赖项,而不是仅仅包括ProjC nuget 包中的 ProjA 和 ProjB 的 dll,这就是我使用带有 -IncludeReferencedProjects 选项的“nuget pack”命令时发生的情况。
此选项表示自动包含文件或将它们添加为依赖项,但始终包含它们,即使我希望将它们添加为依赖项。奇怪的是,在我的 realword 解决方案中,其中一个项目引用总是作为依赖项添加,但其余的则没有,我无法找出区别。
我如何告诉 nuget 将它们添加为依赖项?
我希望引用是项目引用,因为它使开发更容易,而不是每次我想测试时都必须生成更新的本地 nuget 包。
最佳答案
But always includes them, even though I would like them added as a dependency. How do I tell nuget to add them as a dependency?
假设您使用的是 nuget pack
命令而不是 dotnet pack
或 msbuild /t:pack
.
对于 nuget pack xx.csproj -IncludeReferencedProjects
命令,以确保引用的项目包含在您的 ProjC
中包装 nuget dependency
格式,你应该添加相应的xx.nuspec
引用项目文件夹中的文件。
参见 IncludeReferencedProjects
的描述here : 如果引用的项目有相应的 .nuspec
与项目同名的文件,则引用的项目被添加为依赖项。否则,引用的项目将添加为包的一部分。
解决方法如下:
1.对于我来说,我打开cmd.exe
并导航到 ProjA 或 ProjB 的项目文件夹,使用 nuget sepc
命令创建 ProjectName.nuspec
对我来说在项目文件夹中。
2.更改ProjA.nuspec
的内容像这样:
<?xml version="1.0"?>
<package >
<metadata>
<id>ProjA</id>
<version>1.0.0</version>
<title>This is title.</title>
<authors>This is author.</authors>
<owners>These are owners.</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>This is description.</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2019</copyright>
</metadata>
</package>
现在导航到 ProjC 的文件夹并再次打包 ProjC,IncludeReferencedProjects
将按您的预期工作。要检查这一点:重命名 ProjC.nupkg
至 ProjC.zip
, 并检查生成的内容 ProjC.nuspec
文件在 ProjC.zip
文件。你会看到类似 <dependency id="ProjA" version="1.0.0" />
的内容.
另外:
1.由于您使用的是 nuget pack
命令和您的项目目标 .net framework
, 我建议你使用 packages.config
格式来管理三个项目的 nuget 包。
2.为了使您的 ProjC 添加 ProjA 和 ProjB 作为 nuget 依赖项:除了使用 IncludeReferencedProjects+ProjA.nuspec+ProjB.nuspec
方式,实际上我们可以简单地创建一个 ProjC.nuspec
文件并添加如下内容以手动定义依赖项。
<dependencies>
<dependency id="ProjA" version="1.0.0" />
<dependency id="ProjB" version="1.0.0" />
</dependencies>
</metadata>
关于c# - 如何为解决方案中的每个项目创建单独的 nuget 包,并将项目引用转换为 nuget 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59150278/