未使用自定义 nuget 包添加程序集引用
Assembly reference not being added with custom nuget package
我有两个 nuget 包,其中一个依赖于另一个。安装第二个时,第一个包中程序集的程序集引用被正确添加到项目引用中,但是我不知何故无法添加后者。我的规格有问题吗?
// first
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>first</id>
...
</metadata>
<files>
<file src="..\src\MyFirstProject\bin\v4.0\MyFirstProject.dll" target="lib\net40-client\MyFirstProject.dll" />
<file src="..\src\MyFirstProject\bin\v4.0\MyFirstProject.xml" target="lib\net40-client\MyFirstProject.xml" />
<file src="..\src\MyFirstProject\bin\v4.5\MyFirstProject.dll" target="lib\net45\MyFirstProject.dll" />
<file src="..\src\MyFirstProject\bin\v4.5\MyFirstProject.xml" target="lib\net45\MyFirstProject.xml" />
<file src="..\src\MyFirstProject\bin\v4.6\MyFirstProject.dll" target="lib\net46\MyFirstProject.dll" />
<file src="..\src\MyFirstProject\bin\v4.6\MyFirstProject.xml" target="lib\net46\MyFirstProject.xml" />
</files>
</package>
// second
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>second</id>
...
<dependencies>
<dependency id="first" ...
</dependencies
</metadata>
<files>
<file src="..\src\MySecondProject\bin\v4.6\MySecondProject.dll" target="lib\net46\MySecondProject.dll" />
<file src="..\src\MySecondProject\bin\v4.6\MySecondProject.xml" target="lib\net46\MySecondProject.xml" />
</files>
</package>
第二个项目仅适用于 .NET4.6,因为我使用的是此版本附带的一些特定于框架的功能。我尝试安装包的目标项目也是.NET4.6项目。
已验证:
- 目标项目是.NET4.6
- 可以正确创建包
- 程序集位于
lib\
文件夹中
- 程序集已正确打包
- Nuget 包已正确安装
packages.config
中的条目具有正确的框架版本
没关系,我修好了。
问题出在 packages.config
的内容上。我最初将目标项目创建为 .NET4.5 项目并下载了 .NET4.6 nuget 包,这导致未添加程序集引用。在我发现我的错误后,我切换到 .NET4.6 作为项目平台并手动调整 packages.config
中的包版本,但不知何故 VS 记住了那个设置所以它没有改变任何东西。只有在我从 package.config
中完全删除每个包并重新安装它们之后,它才神奇地开始工作。诡异的。 :)
我有两个 nuget 包,其中一个依赖于另一个。安装第二个时,第一个包中程序集的程序集引用被正确添加到项目引用中,但是我不知何故无法添加后者。我的规格有问题吗?
// first
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>first</id>
...
</metadata>
<files>
<file src="..\src\MyFirstProject\bin\v4.0\MyFirstProject.dll" target="lib\net40-client\MyFirstProject.dll" />
<file src="..\src\MyFirstProject\bin\v4.0\MyFirstProject.xml" target="lib\net40-client\MyFirstProject.xml" />
<file src="..\src\MyFirstProject\bin\v4.5\MyFirstProject.dll" target="lib\net45\MyFirstProject.dll" />
<file src="..\src\MyFirstProject\bin\v4.5\MyFirstProject.xml" target="lib\net45\MyFirstProject.xml" />
<file src="..\src\MyFirstProject\bin\v4.6\MyFirstProject.dll" target="lib\net46\MyFirstProject.dll" />
<file src="..\src\MyFirstProject\bin\v4.6\MyFirstProject.xml" target="lib\net46\MyFirstProject.xml" />
</files>
</package>
// second
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>second</id>
...
<dependencies>
<dependency id="first" ...
</dependencies
</metadata>
<files>
<file src="..\src\MySecondProject\bin\v4.6\MySecondProject.dll" target="lib\net46\MySecondProject.dll" />
<file src="..\src\MySecondProject\bin\v4.6\MySecondProject.xml" target="lib\net46\MySecondProject.xml" />
</files>
</package>
第二个项目仅适用于 .NET4.6,因为我使用的是此版本附带的一些特定于框架的功能。我尝试安装包的目标项目也是.NET4.6项目。
已验证:
- 目标项目是.NET4.6
- 可以正确创建包
- 程序集位于
lib\
文件夹中 - 程序集已正确打包
- Nuget 包已正确安装
packages.config
中的条目具有正确的框架版本
没关系,我修好了。
问题出在 packages.config
的内容上。我最初将目标项目创建为 .NET4.5 项目并下载了 .NET4.6 nuget 包,这导致未添加程序集引用。在我发现我的错误后,我切换到 .NET4.6 作为项目平台并手动调整 packages.config
中的包版本,但不知何故 VS 记住了那个设置所以它没有改变任何东西。只有在我从 package.config
中完全删除每个包并重新安装它们之后,它才神奇地开始工作。诡异的。 :)