سؤال

لدي العادي SLN الملف و أنا أجمع عليه غرامة مع msbuild من سطر الأوامر.أنا أفعل هذا:

C:\slndir> msbuild /p:OutDir=C:\slnbin\

و يفرغ كل ما في C:\slnbin باستثناء المواقع التي تحصل على نشرها C:\slnbin_PublishedWebsites\.

ما أود أن لا يكون لديك فقط كل الثنائيات انخفض في بن dir, ولكن أيضا كل executeable برنامج يكون هو نفسه "نشر" مجلد ، على غرار ما كل موقع يحصل.

لذا, فعلى سبيل المثال, إذا كان لدي المشاريع التالية:- المشتركة - Lib1 - Service1 - Lib2 - Service2

أنا وان للحصول على:

  C:\slnbin\ // Everything
  C:\slbin\Deploy\Service1 // Common, Lib1, Service1
  C:\slbin\Deploy\Service2 // Common, Lib2, Service2

حاولت أن أفعل أشياء مثل "msbuild /p:OutDir=C:\slnbin\$(ProjectName)", لكنه يعامل على أنه الحرفي و يخلق الفعلية "$(ProjectName)" subdir.

ويفضل لن تضطر إلى تعديل كل مشروع على حدة وهلم جرا.

هل هذا ممكن ؟ من السهل ؟

هل كانت مفيدة؟

المحلول

مثل جون سوندرز وقال: تحتاج إلى أن يكون على درجة الماجستير MSBuild الملف الذي يعالج عملية.

هنا عينة باستخدام MSBuild المجتمع المهام : GetSolutionProjects أن يحصل على مشاريع حل معين

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Package">

  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

  <!-- Specify here, the solution you want to compile-->
  <ItemGroup>
    <Solution Include="C:\slndir\solution.sln"/>
  </ItemGroup>

  <PropertyGroup>
    <Platform>AnyCPU</Platform>
    <Configuration>Debug</Configuration>

    <!-- Your deployment directory -->
    <DeployDir>C:\slbin\Deploy</DeployDir>
  </PropertyGroup>

  <!-- Gets the projects composing the specified solution -->
  <Target Name="GetProjectsFromSolution">
    <GetSolutionProjects Solution="%(Solution.Fullpath)">
      <Output ItemName="ProjectFiles" TaskParameter="Output"/>
    </GetSolutionProjects>
  </Target>

  <Target Name="CompileProject" DependsOnTargets="GetProjectsFromSolution">
    <!-- 
      Foreach project files
        Call MSBuild Build Target specifying the outputDir with the project filename.
    -->
    <MSBuild Projects="%(ProjectFiles.Fullpath)"
             Properties="Platform=$(Platform);
             Configuration=$(Configuration);
             OutDir=$(DeployDir)\%(ProjectFiles.Filename)\"
             Targets="Build">
    </MSBuild>
  </Target>
</Project>

نصائح أخرى

وسيكون لديك للقيام بذلك "باليد". إنشاء الماجستير ملف المشروع MSBUILD التي تبني الحل، ثم نسخ جميع النواتج حل حيث يريد لهم. هذا هو (تقريبا) كيف برنامج Visual Studio بناء فريق يفعل ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top