mat*_*att 5 .net c# visual-studio nuget
我有一个看起来像这样的解决方案。
我想为 ProjA、ProjB 和 ProjC 生成单独的 nuget 包,并且我希望此过程能够检测 ProjC 中上面显示的项目引用,并将它们转换为 nuspec 文件中的 nuget 依赖项,而不仅仅是包含 ProjA 的 dll和 ProjC nuget 包中的 ProjB,这就是当我使用带有 -IncludeReferencedProjects 选项的“nuget pack”命令时发生的情况。
此选项表示自动包含文件或将它们添加为依赖项,但始终包含它们,即使我希望将它们添加为依赖项。奇怪的是,在我的真实解决方案中,项目引用之一总是被添加为依赖项,但其余的则不会,我无法弄清楚其中的区别。
我如何告诉 nuget 将它们添加为依赖项?
我希望引用是项目引用,因为它使开发更容易,而不是每次我想测试时都必须生成更新本地 nuget 包。
但始终包含它们,即使我希望将它们添加为依赖项。我如何告诉 nuget 将它们添加为依赖项?
假设您使用nuget pack命令而不是dotnet packormsbuild /t:pack。
对于nuget pack xx.csproj -IncludeReferencedProjects命令,为了确保引用的项目ProjC以格式包含在您的包中nuget dependency,您应该在引用的项目的文件夹中添加相应的文件xx.nuspec文件。
IncludeReferencedProjects 请参阅此处的描述:如果引用的项目有一个.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>
Run Code Online (Sandbox Code Playgroud)
现在导航到 ProjC 的文件夹并再次打包 ProjC,它将IncludeReferencedProjects按您的预期工作。要检查这一点:将其重命名为ProjC.nupkg,并检查 file.txt中生成的文件ProjC.zip的内容。你会看到类似的东西。ProjC.nuspecProjC.zip<dependency id="ProjA" version="1.0.0" />
此外:
1.由于您正在使用nuget pack命令和您的项目目标.net framework,我建议您使用packages.configformat 来管理这三个项目的 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>
Run Code Online (Sandbox Code Playgroud)