我的示例解决方案中有2个项目库>视觉工作室。
我在另一个中直接引用其中一个。当我现在发布我的nuget包时,在依赖性概述上我得到了我直接引用的nuget是>= 1.0.0.0
,当我通过nuget执行时,引用意味着没有直接引用,因为相同的解决方案我在>下获得正确的版本号=依赖概述。我不会更改默认的依赖行为lowest
。
我试过的是用依赖项/ references / files元素更新我的nuspec文件,它们都不适用于我。
我想在直接引用的nuget中看到相同版本的给定nuget作为依赖。
答案 0 :(得分:7)
我会尝试对你的问题做一个非平凡的解释,因为它没有得到非常有说服力的解释,但最后一句话和你对直接引用的强调让我觉得我知道你的意思是什么。如果我误解了你的问题,请耐心和道歉。
NuGet定义了-IncludeReferencedProjects
选项,以指示nuget.exe
如何处理引用的项目,无论是作为依赖项还是作为程序包的一部分:
.nuspec
文件,则该引用的项目将作为显式的NuGet依赖项添加。我的猜测是你在追寻前者。
让我们将问题简化为最基本的形式:假设您有一个解决方案,其中LibraryA
直接引用LibraryB
作为项目参考。构建解决方案时,LibraryA
的程序集输出将复制到LibraryB
~/
│ Solution.sln
├───LibraryA
│ │ ClassA.cs
│ │ LibraryA.csproj
│ │ LibraryA.nuspec
│ ├───bin
│ │ ├───Debug
│ │ │ LibraryA.dll
│ │ │ LibraryA.pdb
│ │ └───Release
│ └───Properties
│ AssemblyInfo.cs
└───LibraryB
│ ClassB.cs
│ LibraryB.csproj
│ LibraryB.nuspec
├───bin
│ ├───Debug
│ │ LibraryA.dll
│ │ LibraryA.pdb
│ │ LibraryB.dll
│ │ LibraryB.pdb
│ └───Release
└───Properties
AssemblyInfo.cs
确保您的项目包含具有相同名称的.nuspec文件。这对项目LibraryA
特别重要,因为它是被引用的项目。我会做这两个好的做法。现在让我们使用以下基本模板:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<authors>The author... (**mandatory element**)</authors>
<description>Your description... (**mandatory element**)</description>
</metadata>
</package>
在上面的.nuspec
中,当您针对$id$
运行$version$
时,替换令牌inferred
和nuget.exe
将获得其值.csproj
已构建的文件。
为了便于说明,我将在我的[assembly: AssemblyVersion("1.0.*")]
文件中使用AssemblyInfo.cs
,并在每个项目上执行几个单独的构建,以确保我的程序集获得一些不同的有趣版本。
现在,我将从解决方案目录(nuget.exe
)命令行运行~
PS> nuget pack .\LibraryB\LibraryB.csproj -IncludeReferencedProjects -Verbosity detailed
Attempting to build package from 'LibraryB.csproj'.
Packing files from '~\LibraryB\bin\Debug'.
Using 'LibraryB.nuspec' for metadata.
Add file '~\LibraryB\bin\Debug\LibraryB.dll' to package as 'lib\net451\LibraryB.dll'
Id: LibraryB
Version: 1.0.5993.6096
Authors: The author... (**mandatory element**)
Description: Your description... (**mandatory element**)
Dependencies: LibraryA (= 1.0.5993.7310)
Added file 'lib\net451\LibraryB.dll'.
Successfully created package '~\LibraryB.1.0.5993.6096.nupkg'.
PS>
LibraryB.1.0.5993.6096.nupkg
,其具有与LibraryA.1.0.5993.7310.nupkg
的显式NuGet依赖关系。 当您检查LibraryB.1.0.5993.6096.nupkg
的内容时,您会看到.nuspec
生成的nuget.exe
已将所有$version$
替换令牌替换为实际版本的替换令牌使用
最后一点,上面的命令只会为LibraryB
创建NuGet包,但显然你只需再次针对LibraryA
再次运行它来为LibraryA.csproj
创建一个<{1}}
我希望这就是你所追求的,或者至少可以为你能做的事情提供一些启示。