Генерация и компиляция файлов .resources с помощью MsBuild - PullRequest
1 голос
/ 14 июня 2009

У меня есть процесс, в котором мне нужно автоматизировать процесс создания спутниковых сборок. В частности, это для 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.

Я пробовал несколько вещей. Использование процесса сборки, по-видимому, запускается не в то время, и в конечном итоге он не может найти файлы.

1 Ответ

1 голос
/ 15 июня 2009

Я точно не знаю, в чем твоя проблема но ты сказал что-то, что заставляет меня задуматься. «Использование процесса сборки, по-видимому, запускается в неподходящее время, и в итоге не удается найти файлы». Из этого складывается впечатление, что вы пытаетесь создать элемент, содержащий файлы, которые создаются во время сборки процесс. Если это так, то вы должны объявить их как динамические элементы, которые являются элементами, объявленными внутри цели. Элементы, объявленные вне целей ( static items), оцениваются до того, как любая цель начинает выполняться. Смотрите мое сообщение в блоге MSBuild: Оценка имущества и предметов.

Сайед Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

...