不需要的特定文化DLL被复制到bin目录

17

我正在使用Visual Studio 2013和Fluent Validation 5.6.2

我注意到在构建后,在bin文件夹中复制了所有特定文化的FluentValidation.resources.dll,这似乎在.nuspec文件中提到过。

> <file src="lib\NET35\de\FluentValidation.resources.dll"
> target="lib\NET35\de\FluentValidation.resources.dll" />
>     <file src="lib\NET35\es\FluentValidation.resources.dll" target="lib\NET35\es\FluentValidation.resources.dll" />
>     <file src="lib\NET35\fr\FluentValidation.resources.dll" target="lib\NET35\fr\FluentValidation.resources.dll" />
>     <file src="lib\NET35\it\FluentValidation.resources.dll" target="lib\NET35\it\FluentValidation.resources.dll" />
>     <file src="lib\NET35\nl\FluentValidation.resources.dll" target="lib\NET35\nl\FluentValidation.resources.dll" />
>     <file src="lib\NET35\pt\FluentValidation.resources.dll" target="lib\NET35\pt\FluentValidation.resources.dll" />
>     <file src="lib\NET35\sv\FluentValidation.resources.dll" target="lib\NET35\sv\FluentValidation.resources.dll" />

但我不需要这些位于bin文件夹中的内容,因为该项目不支持任何特定文化的消息。

那么我该如何告诉vs-build忽略这些特定文化的dll?


你找到解决方案了吗? - Alex
这些程序集包含在Fluent Validation软件包中,因此一种方法是从软件包中删除所有不需要的文化(需要为每个新版本重新应用更改),或者进行构建后清理。 - Alex
那种方法我知道,但我正在寻找更好的解决方案。 - algos
这个回答解决了你的问题吗?从生成输出中省略程序集的本地化版本 - thalm
2个回答

22

我的解决方案是在关闭project标签之前,在.csproj文件末尾添加这个目标。

<Target Name="AfterPackage" AfterTargets="CopyAllFilesToSingleFolderForPackage" />

<ItemGroup>
    <FluentValidationExcludedCultures Include="cs;da;de;es;fa;fi;fr;it;ko;mk;nl;pl;pt;ru;sv;tr;zh-CN">
        <InProject>false</InProject>
    </FluentValidationExcludedCultures>
</ItemGroup>

<Target Name="RemoveTranslationsAfterBuild" AfterTargets="AfterBuild">
    <RemoveDir Directories="@(FluentValidationExcludedCultures->'$(OutputPath)%(Filename)')" />
</Target>

<Target Name="RemoveTranslationsAfterPackage" AfterTargets="AfterPackage">
    <RemoveDir Directories="@(FluentValidationExcludedCultures->'$(_PackageTempDir)\$(OutputPath)%(Filename)')" />
</Target>

虽然不太美观,但确实能够完成任务。如果你需要一些特定文化的资源,只需从列表中删除相应的行。如果将来的更新添加了你不想要的新文化,请将其添加到列表中。

最好的选择是请求开发者将资源分成多个NuGet程序包,这样您就可以只添加所需的部分。我现在会继续使用这个解决方案,直到有人提出更好的方法。


现在你可以在官方项目Wiki上找到我的解决方案:https://github.com/JeremySkinner/FluentValidation/wiki/f.-Localization(页面底部)。


那发布后呢?我是说,我在发布后的 BIN 目录中看到了那些文件夹。 - Romias
@Romias,请尝试我的更新答案,它解决了“发布”场景。如果您之前已经部署过,请务必清理部署目标。 - Marcos
现在有一个更好的解决方案,这个答案不应该再被标记为解决方案了:https://dev59.com/Ml0a5IYBdhLWcg3wfYw6 - thalm

0
我曾经遇到过外部库的同样问题,我在Visual Studio项目属性中添加了后构建脚本,它会删除输出目录下的所有文件夹(对我来说没问题,否则请设置目录列表)。
FOR /D %%d IN ($(TargetDir)*) DO RMDIR /S /Q %%d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接