控制.nuspec中的代码合同引用

时间:2012-12-03 16:54:44

标签: .net nuget code-contracts

我正在使用代码合同为我的项目生成附属程序集。基本上它为项目的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>

3 个答案:

答案 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

其他人有同样的问题: https://social.msdn.microsoft.com/Forums/en-US/fe7fad45-a474-4157-a4ee-3f94a2b1071f/nuget-package-dependency-reference-not-added-to-project?forum=visualstudiogeneral

示例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" />