4

我正在使用代码合同为我的项目生成附属程序集。基本上它为项目的 MyAssembly.dll 创建了一个 MyAssembly.Contracts.dll。这应该放在您的程序集旁边,但不被任何应用程序引用——它仅由合同工具使用。

我正在尝试将其包含在我的 nuget 包中,但是当我将该包安装到另一个应用程序中时,Contracts 程序集作为参考包含在内,这会产生问题。

根据.nuspec 参考,这应该像添加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>
4

3 回答 3

4

由于代码合同是一个单独的可选程序集,我建议创建一个新的 MyPackage.CodeContracts 包,它将代码合同程序集复制到您需要的地方。这可以使用所谓的工具包中的简单 PowerShell 脚本 (install.ps1 + uninstall.ps1) 来完成。

例如,这与创建 MyPackage.Sample 包的方法类似。使用基于约定的目录创建包,并改为以 .nuspec 文件为目标。你会遇到更少的问题,恕我直言,这也是一个更好的解决方案。

于 2012-12-03T22:37:23.243 回答
1

跟进——较新的 NuGet 版本似乎做了我最初期望它做的事情,并且包含文件而不引用它们。不再需要自定义安装程序。

于 2013-02-24T18:15:21.093 回答
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)非常重要。

其他方面没有指定框架,您将看到添加到目标项目的引用。IE

<file src="bin\Debug\My.ServiceBusEntities.dll" target="lib\ServiceBusEntities.dll" />
于 2014-11-07T04:48:55.907 回答