当确定包中的哪些dll应该作为程序集引用添加时,NuGet会排除任何结束“.Resources.dll”的内容。这旨在排除本地化的satellite assemblies,但这意味着如果您有一个名为MyCompany.Resources.dll的DLL,则添加引用会很棘手。
这有什么好的解决方法吗?
答案 0 :(得分:6)
我现在通过跟随https://nuget.codeplex.com/workitem/1644的示例进行了一些修改。
我添加了对网站项目的检查,因为它们不支持“添加”方法。
我在 metadata
文件中的nuspec
元素之后添加了此内容。 (如果你没有使用NuGet 2.5中提供的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>
然后将这两个文件添加到项目目录中的新 tools
文件夹中。 (注意修复DLL路径传递给References.Add
方法的方式,与codeplex示例相比)
<强> 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() }
答案 1 :(得分:1)
这个NuGet的分支有更改可以解决这个问题,但是考虑到额外的复杂性,我不确定它是否会成为主人:https://nuget.codeplex.com/SourceControl/network/forks/jjgonzalez/1644/contribution/5459