Из-за большого количества файлов .resx в нашем приложении я создал следующий скрипт MSBuild для компиляции всех языковых файлов .resx в .resource, а затем вставил их в сборки ресурсов спутника.
<Project DefaultTargets="Main" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Res Include = "Dialog\*.ja-JP.resx">
<Culture>ja-JP</Culture>
<Project>Dialog</Project>
</Res>
</ItemGroup>
<Target Name="Main">
<Message Text="$(destination)"/>
<CallTarget Targets="CompileResources" />
<CallTarget Targets="BuildSatelliteAssemblies" />
<CallTarget Targets="CopyToFolder" Condition="$(destination)!=''"/>
<CallTarget Targets="CleanUp" />
</Target>
<Target Name="CompileResources">
<GenerateResource Sources="@(Res)" PublicClass="true" >
<Output ItemName="Resources" TaskParameter="OutputResources"/>
</GenerateResource>
</Target>
<Target Name="BuildSatelliteAssemblies" DependsOnTargets="CompileResources">
<MakeDir Directories="%(Res.Culture)"/>
<AL OutputAssembly="%(Culture)\%(Project).resources.dll"
Version="0.0.0.0"
Culture="%(Culture)"
ProductName="%(Project)"
Title="%(Project)"
EmbedResources="@(Resources)"/>
</Target>
<Target Name="CopyToFolder" DependsOnTargets="BuildSatelliteAssemblies">
<MakeDir Directories="$(destination)\%(Res.Culture)"/>
<CreateItem Include="%(Res.Culture)\*.dll" AdditionalMetadata="Culture=%(Res.Culture)">
<Output ItemName="SatelliteAssemblies" TaskParameter="Include"/>
</CreateItem>
<Copy DestinationFolder="$(destination)\%(Culture)"
SourceFiles="@(SatelliteAssemblies)" />
</Target>
<Target Name="CleanUp">
<Delete Files="@(Resources)"/>
</Target>
</Project>
Спутниковые сборки, кажется, компилируются и встраиваются правильно, однако, когда я размещаю их в своем приложении, они не распознаются и по умолчанию возвращаются к ресурсам культуры по умолчанию.Если я собираю проект с помощью Visual Studio и использую сборки, которые он создает с этим, они загружаются нормально.
Я должен что-то упустить, чтобы приложение распознало мои внешние сборки.Все они названы одинаково, а размеры почти одинаковы.