2013-10-28 23 views
12

ローカライズされたリソースファイルを持つwinforms(NET 3.5)プロジェクトfoo.csprojがあります。私はmsbuildを使ってプロジェクトをビルドし、展開構造を作成します。msbuildの出力パスを設定する

<MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" /> 

それをコピーしFOO.EXEとローカライズされたすべてのDLLの\ fooというフォルダを展開するが、私は、ローカライズされたDLLの別のフォルダにコピーされることを必要とする、それは次のようになります。

  • デプロイ\ fooというの\ fooという。 \ロケールがRU-RU \は

foo.resources.dll PT-BR \ \

  • デプロイ\ロケールをfoo.resources.dll \ exeファイル
  • 展開はCONFIする方法はありますexeとdllを別のフォルダにコピーするにはmsbuildを使用しますか?

  • +0

    もしあなたがresxファイルについて話しているのであれば、それらは 'GenerateSatelliteAssemblies'と' CopyFilesToOutputDirectory'の間にカルチャー名に対応するサブフォルダに生成されコピーされるべきです。あなたのリソースファイルの名前はどうでしたか? – JoeBilly

    +0

    はい、私はresxファイルを意味します。 Res.resx、Res.ru-RU.resxなどのファイルをプロジェクトに追加し、msbuildは出力フォルダにこれらのサブフォルダを作成します。これはfoo.exeファイルを作成するのと同じ場所です。しかし、これらのサブフォルダを個別の場所にコピーする必要があります - deploy \ locales – wince

    答えて

    3

    リソースファイルの生成とコピーは、ビルド中に内部MSBuildプロセスで行われます(GenerateSatelliteAssembliesCopyFilesToOutputDirectory)。それらは出力ディレクトリにコピーされます。

    私が知る限り、この動作を変更することはできません。

    ビルドステップの後にリソースファイルを移動する必要があります。 のMoveタスクを使用することをおすすめします。

    <MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" /> 
    
    <CreateItem Include="..\deploy\foo\**\*.resources.dll"> 
        <Output TaskParameter="Include" ItemName="ResourcesToMove" /> 
    </CreateItem> 
    
    <Move SourceFiles="@(ResourcesToMove)" DestinationFiles="@(ResourcesToMove->'..\deploy\locales\%(RecursiveDir)\%(Filename)%(Extension)')"/> 
    
    +0

    ありがとう、私はこれが解決策だと思います。私は今、msbuildコミュニティのタスクを試してみましょう。 – wince

    +0

    この回答は少し難題かもしれません。おそらくあなた自身の時間を節約するためにジェロームの答えを試すことを検討してください。 –

    18

    MSBuildコマンドラインを使用すると、以下のような出力パスを指定できます。

     
    
    C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe /t:Build /p:OutDir=c:\custom_build_out\;Configuration=PRODUCTION;Platform=x64 
     
    

    注:

    1. あなたは/ pのプロパティをOUTDIR指定の順序を変更した場合、これは動作しません。
    2. OutDirプロパティは、代替のディレクトリへのフルパスを指定するためのプロパティです。 OutputPathは相対ディレクトリ用です。
    3. これは、カスタムビルドの出力パスにプロジェクト名+ビルド構成名があるため、msbuildはこれらをOutDirに追加しないためです。
    +0

    ありがとう、それは私のために働いた! –

    +0

    これは完璧でした!私は順序を変更しなければならなかった、それはブロックされていなかった!^_^ –

    +0

    これは私にとってToolsVersion = "14.0"で動作しません、MSBuildは参照を見つけることができません。 PowerShellで手動でコピーしています。 –

    関連する問題