我正在使用代码合同为我的项目生成附属程序集。基本上它为项目的MyAssembly.dll创建了MyAssembly.Contracts.dll。这应该放在您的程序集旁边,但不会被任何应用程序引用 - 它仅由合同工具使用。
我正在尝试将其包含在我的nuget包中,但是当我将该包安装到另一个应用程序中时,Contracts程序集将作为参考包含在内,从而产生问题。
根据.nuspec reference,这应该像添加references
元素一样简单,但它似乎被忽略了。我现在的理论是,这是因为我使用.csproj来替换令牌,它正在读取.csproj而不是.nuspec的引用。
以前有人这样做过吗?有什么想法吗?
以下是我的.nuspec的相关部分:
<?xml version="1.0"?>
<package>
<metadata>
<references>
<reference file="MyAssembly.dll"/>
</references>
</metadata>
<files>
<file src="bin\Release\CodeContracts\*.dll" target="lib\net45"/>
</files>
</package>
答案 0 :(得分:4)
由于代码合约是一个单独的可选程序集,我建议您创建一个新的MyPackage.CodeContracts包,它会将Code Contracts程序集复制到您需要的地方。这可以使用所谓的工具包中的简单PowerShell脚本(install.ps1 + uninstall.ps1)来完成。
这与创建MyPackage.Sample包的方法类似。使用基于约定的目录创建包,然后以.nuspec文件为目标。你会遇到更少的问题,恕我直言,这也是一个更好的解决方案。
答案 1 :(得分:1)
跟进 - 更新的NuGet版本似乎做了我原先预期的做,并包含文件而不引用它们。不再需要自定义安装程序。
答案 2 :(得分:0)
这对我来说也是一个问题。我已将Nuget样本复制到:https://github.com/NuGet/Samples/issues/3
package \ metadata \ references \ group \ reference节点文档:http://docs.nuget.org/docs/reference/nuspec-reference#Specifying_Explicit_Assembly_References_in_version_2.5_and_above
示例nuspec:
<references>
<reference file="My.ServiceBusEntities.dll" />
</references>
</metadata>
<files>
<file src="bin\Debug\My.ServiceBusEntities.dll" target="lib\net45\ServiceBusEntities.dll" />
注意:在file:target属性中使用正确且匹配的“net45”框架文件夹以匹配项目目标(即框架4.5)非常重要。
其他方面没有指定框架,您将看到添加到目标项目的引用。 即。
<file src="bin\Debug\My.ServiceBusEntities.dll" target="lib\ServiceBusEntities.dll" />