2009-06-14 79 views
1

我有一個需要自動生成附屬程序集的過程。具體來說,這是爲WPF和Resx和BAML資源的結合。使用MsBuild生成和編譯.resources文件

我有一個可以工作的構建腳本,但它需要手動添加我想與BAML資源結合使用的.resources文件。 IOW,每次添加.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> 

如前所述它的工作原理。但如果有一些使用通配符的方法(即$(TargetName).s。%(LocBamlCsv.Culture).resources),那麼調用al的最後一個命令將更容易處理。

我已經嘗試了很多東西,使用構建過程顯然在錯誤的時間點燃,最終無法找到文件。

+0

你總是可以寫掃描目錄* .RES或什麼,並生成構建腳本的腳本。 – 2009-06-14 03:08:14

+0

傑夫如何做到這一點的任何鏈接?我不熟悉msbuild,我不知道如何獲取文件並將它們傳遞到鏈接器路徑。另一個問題是部分不起作用(即使使用硬編碼的文件名 - 大概是因爲構建過程中這些文件可用的時間是錯誤的)顯式命令的作用。 – 2009-06-14 03:15:43

回答

1

我不確定你的問題到底是什麼 但你確實說了一些讓我感到驚訝的東西。 「使用構建過程顯然在錯誤的時間觸發,最終無法找到文件」由此我得到的印象是,您嘗試創建一個包含在構建過​​程中生成的文件的項目。是這種情況,那麼你應該宣佈這些爲動態項目,這是內的項目。在任何目標開始執行之前評估在目標外部聲明的項目(靜態項目)。請參見我的博客文章MSBuild: Property and Item Evaluation.

賽義德·易卜拉欣·哈希米

的My Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build