NuGet を介してターゲット プロジェクトに構成ファイルをインストールする必要があるという要件があります。これらのファイルはエンド ユーザーが編集することを意図しているため、決して更新しないでください。
構成ファイルを独自の NuGet パッケージに分割し、NuGet のバージョン管理の制約を使用してこれを解決しようとしましたが、うまくいきません。アップグレーダーが新しいバージョンを取得せず、新しいインストーラーが最新バージョンを取得するように制限する方法はありません。例えば:
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<!-- Other Stuff Omitted -->
<dependencies>
<group targetFramework="net35">
<dependency id="MyPackage.MVC4.Core" version="[$version$]" />
<dependency id="MyPackage.Web" version="[4,5)" />
</group>
<group targetFramework="net40">
<dependency id="MyPackage.MVC4.Core" version="[$version$]" />
<dependency id="MyPackage.Web" version="[4,5)" />
</group>
<group targetFramework="net45">
<dependency id="MyPackage.MVC4.Core" version="[$version$]" />
<dependency id="MyPackage.Web" version="[4,5)" />
</group>
</dependencies>
</metadata>
</package>
これにより、アップグレードされた MyProject.Web のバージョンは現在のバージョンに維持されますが、新しいプロジェクトにインストールされた場合、MyPackage.Web のバージョンは、最新バージョンがより高い場合でも 4.0.x を超えることはありません。
スペクトルの反対側を試して、現在のバージョンに置き換えられる $version$ を使用すると、NuGet の古いバージョンを使用している人は、パッケージを更新する必要があるため、アップグレード時に構成ファイルがリセットされることになります。
そこで、別のアプローチを試してみたいと思います。ファイルを「最初の」ディレクトリに配置し、それらがまだ存在しない場合にのみ再帰的にコピーすることがターゲットプロジェクトであると考えています。しかし、別の問題に遭遇しました。install.ps1 スクリプトに渡される $package オブジェクトに関するドキュメントがないようです。
私が気付いていないこの要件を満たす方法の他のオプションはありますか?