4

プロジェクトの衛星アセンブリを生成するためにコードコントラクトを使用しています。基本的に、プロジェクトのMyAssembly.dllのMyAssembly.Contracts.dllを作成します。これはアセンブリの横に配置されることになっていますが、どのアプリからも参照されていません。コントラクトツールでのみ使用されます。

これをnugetパッケージに含めようとしていますが、そのパッケージを別のアプリにインストールすると、問題を引き起こす参照としてコントラクトアセンブリが含まれます。

.nu​​specリファレンスによると、これは要素を追加するのと同じくらい簡単なはずですが、references無視されているようです。私の現在の理論では、これは置換トークンに.csprojを使用しており、.nuspecではなく.csprojから参照を読み取っているためです。

誰かがこれを以前にやったことがありますか?何か案は?

これが私の.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

Code Contracts は独立したオプションのアセンブリであるため、Code Contracts アセンブリを必要な場所にコピーする新しい MyPackage.CodeContracts パッケージを作成することをお勧めします。これは、いわゆるツール パッケージで単純な PowerShell スクリプト (install.ps1 + uninstall.ps1) を使用して実行できます。

これは、たとえば MyPackage.Sample パッケージを作成する場合と同様のアプローチです。規則ベースのディレクトリを使用してパッケージを作成し、代わりに .nuspec ファイルをターゲットにします。問題が少なくなり、私見でもそれはより良い解決策です。

于 2012-12-03T22:37:23.243 に答える
1

フォローアップ-新しいNuGetバージョンは、私が最初に期待していたことを実行し、ファイルを参照せずにインクルードしているようです。カスタムインストーラーはもう必要ありません。

于 2013-02-24T18:15:21.093 に答える