我正在使用代码契约(Contract)为我的项目生成附属程序集。基本上它为项目的 MyAssembly.dll 创建一个 MyAssembly.Contracts.dll。这应该放在你的程序集旁边,但不被任何应用程序引用——它只被契约(Contract)工具使用。
我试图将它包含在我的 nuget 包中,但是当我将该包安装到另一个应用程序中时,契约(Contract)程序集被包含为引用,这会产生问题。
根据 .nuspec reference ,这应该像添加 references
元素一样简单,但它似乎被忽略了。我目前的理论是,这是因为我使用 .csproj 替换 token ,并且它正在读取 .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>
最佳答案
由于代码契约(Contract)是一个单独的和 可选的 程序集,因此 我建议创建一个新的 MyPackage.CodeContracts 包 ,它将代码契约(Contract)程序集复制到您需要的地方。这可以在所谓的工具包中使用一个简单的 PowerShell 脚本(install.ps1 + uninstall.ps1)来完成。
这与创建 MyPackage.Sample 包的方法类似。使用基于约定的目录创建包,并以 .nuspec 文件为目标。你会遇到更少的问题,恕我直言,这也是一个更好的解决方案。
关于.net - 控制 .nuspec 中的代码契约引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13687995/