У меня есть процесс, в котором мне нужно автоматизировать процесс создания спутниковых сборок. В частности, это для WPF и объединения ресурсов Resx и BAML.
У меня есть скрипт сборки, который работает, но он требует ручного добавления файлов .resources, которые я хочу объединить с ресурсами BAML. Я должен добавлять в скрипт сборки каждый раз, когда добавляю ресурс .Resx. Не круто!
В настоящее время я запускаю компоновщик сборки вручную, и скрипт выглядит следующим образом:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Adds the build action 'LocBamlCsv' -->
<ItemGroup>
<AvailableItemName Include="LocBamlCsv" />
</ItemGroup>
<Target Name="CreateSatelliteAssemblies"
DependsOnTargets="$(CreateSatelliteAssembliesDependsOn)">
<!-- Locbaml needs the runtime assemblies in the intermediate dir -->
<Copy SourceFiles="$(ProjectDir)..\Tools\LocBaml.exe"
DestinationFolder="$(OutputPath)" />
<!-- generate a .resources file for .csv merged output -->
<Exec Command="LocBaml /generate ..\..\$(IntermediateOutputPath)$(TargetName).g.$(UICulture).resources /trans:%(LocBamlCsv.FullPath) /out:../../$(IntermediateOutputPath) /cul:%(LocBamlCsv.Culture)"
WorkingDirectory="$(OutputPath)"
Outputs="$(OutputPath)%(LocBamlCsv.Culture)\$(TargetName).$(UICulture).dll" />
<!-- Generate the resource assembly by merging all .resources files -->
<!-- NOTE: Explicitly add any resource files here -->
<Exec Command="al /template:$(TargetName).exe /culture:%(LocBamlCsv.Culture) /out:%(LocBamlCsv.Culture)\$(TargetName).resources.dll /embed:$(TargetName).g.%(LocBamlCsv.Culture).resources /embed:$(TargetName).Properties.Resources.%(LocBamlCsv.Culture).resources"
WorkingDirectory="$(InterMediateOutputPath)"
/>
</Target>
</Project>
Как уже упоминалось, это работает. но с последней командой, которая вызывает al, было бы намного легче работать, если бы был какой-то способ использовать подстановочные знаки (например, $ (TargetName). * s.% (LocBamlCsv.Culture) .resources.
Я пробовал несколько вещей. Использование процесса сборки, по-видимому, запускается не в то время, и в конечном итоге он не может найти файлы.