2013-10-28 35 views
12

Yerelleştirilmiş kaynak dosyalarıyla birlikte bir winforms (NET 3.5) projesi foo.csproj var. Projeyi oluşturmak ve dağıtım yapısını oluşturmak için msbuild kullanıyorum.msbuild çıkış yolunu yapılandırma

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

kopyalar Foo.exe ve tüm yerelleştirilmiş dll en dağıtmak için \ fan klasörü, ancak ben dll en lokalize gerek ayrı klasöre kopyalanacak, bu olmalıdır:

  • dağıtma \ fan \ fan.
  • dağıtma \ yerel ayarlar pt-BR \ foo.resources.dll

\ foo.resources.dll exe

  • dağıtma \ yerel ayarlar confi herhangi bir yolu var mı ru-RU \ \ exe ve dll'in farklı klasörlere kopyalamak için gulet msbuild?

  • +0

    Eğer resx dosyaları hakkında konuşuyorsanız, onlar oluşturulan ve 'GenerateSatelliteAssemblies' ve' CopyFilesToOutputDirectory' sırasında kültür adına karşılık gelen bir alt klasörde kopyalanmalıdır. Kaynak dosyalarınızı nasıl adlandırdınız? – JoeBilly

    +0

    Evet, resx dosyalarını kastediyorum. Res.resx, Res.ru-RU.resx etc dosyalarını projeye ekledim ve msbuild bu alt klasörleri çıktı klasörüne oluşturur - aynı yerde foo.exe dosyası oluşturur. Ama bu alt klasörlere ayrı bir yere kopyalanmaya ihtiyacım var - konuşun \ locales – wince

    cevap

    3

    Kaynaklar dosyaları oluşturma ve kopyalama dahili bir MSBuild işleminde derleme sırasında yapılır: GenerateSatelliteAssemblies ve CopyFilesToOutputDirectory. Çıkış dizinine kopyalanırlar.

    Bildiğim kadarıyla, bu davranışı değiştiremezsiniz.

    Kaynak dosyalarınızı yapı adımından sonra taşımak zorundasınız. MSBuild community tasks'dan Move görevini kullanmasını öneririm.

    <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

    Teşekkürler, sanırım bu bir çözüm. Şimdi msbuild topluluk görevlerini deneyeceğim. – wince

    +0

    Bu cevap sizin için biraz aşırı olabilir. Önce Jerome'un cevabını denemeyi düşünün. –

    18

    MSBuild komut satırını kullanarak, aşağıdaki gibi çıkış yolunu belirtebilirsiniz;

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

    Not:

    1. sen/p özelliğini OutDir belirterek sırasını değiştirirseniz, bu işe yaramaz.
    2. OutDir özelliği, alternatif bir yönlendiricinin tam yolunu belirtmek içindir. OutputPath bağıl dizin içindir.
    3. msbuild bu şeyleri OutDir'e eklemediğinden, özel derleme çıktı yolunda proje adı + yapı yapılandırması adına sahip.
    +0

    Teşekkürler, bu benim için çalıştı! –

    +0

    Bu mükemmeldi! Siparişi değiştirmek zorunda kaldım ve bu, engellendi!^_^ –

    +0

    Bu benim ToolsVersion = "14.0" ile çalışmaz, MSBuild başvuruları bulamıyor. Powershell ile elle kopyalarım. –