NuGet は、パッケージ内のどの dll をアセンブリ参照として追加する必要があるかを判断するときに、".Resources.dll" で終わるものをすべて除外します。これは、ローカライズされたサテライト アセンブリを除外するように設計されていますが、MyCompany.Resources.dll という DLL がある場合、参照を追加するのが難しいことを意味します。
これに対する適切な回避策はありますか?
NuGet は、パッケージ内のどの dll をアセンブリ参照として追加する必要があるかを判断するときに、".Resources.dll" で終わるものをすべて除外します。これは、ローカライズされたサテライト アセンブリを除外するように設計されていますが、MyCompany.Resources.dll という DLL がある場合、参照を追加するのが難しいことを意味します。
これに対する適切な回避策はありますか?
ここでは、 https://nuget.codeplex.com/workitem/1644の例をいくつか変更して、これを回避しました。
「追加」メソッドをサポートしていないため、Web サイト プロジェクトのチェックを追加しました。
ファイルのmetadata
要素の後にこれを追加しました。(おそらく、NuGet 2.5 で利用可能なオプションを使用nuspec
していない場合にのみ必要です)includereferencedprojects
<files>
<file src="bin\Release\Foo.Resources.dll" target="lib\net40" />
<file src="bin\Release\Foo.Resources.pdb" target="lib\net40" />
<file src="tools\*" target="tools" />
</files>
そして、これら 2 つのファイルをtools
プロジェクト ディレクトリの新しいフォルダーに追加しました。References.Add
(コードプレックスの例と比較して、DLL パスがメソッドに渡される方法の修正に注意してください)
Install.ps1
param($installPath, $toolsPath, $package, $project)
$resourcesDll = Join-Path $installPath "lib\net40\Foo.Resources.dll"
Write-Host "Adding resources DLL from " $resourcesDll
if ($project.Kind -eq "{E24C65DC-7377-472b-9ABA-BC803B73C61A}") {
$project.Object.References.AddFromFile($resourcesDll)
} else {
$project.Object.References.Add($resourcesDll)
}
Uninstall.ps1
param($installPath, $toolsPath, $package, $project)
Write-Host "Removing Foo.Resources reference"
$project.Object.References | where { $_.Name -eq 'Foo.Resources' } | foreach { $_.Remove() }
NuGet のこのフォークには、これに対処する変更がありますが、複雑さが増すため、マスターになるかどうかはわかりません。 /5459