سؤال

أنا أحاول أن الإعداد CruiseControl.net في هذه اللحظة.حتى الآن أنها تعمل لطيفة, ولكن لدي مشكلة مع MSBuild المهمة.

وفقا الوثائق, ، يمر CCNetArtifactDirectory إلى MSBuild.ولكن كيف يمكنني استخدامه ؟

حاولت هذه:

<buildArgs>
   /noconsolelogger /p:OutputPath=$(CCNetArtifactDirectory)\test
</buildArgs>

ولكن هذا لا يعمل.في الواقع, فإنه يقتل الخدمة مع هذا الخطأ:

ThoughtWorks.CruiseControl.الأساسية.Config.Preprocessor.EvaluationException:إشارة إلى رمز غير معروف CCNetArtifactDirectory

الوثائق بدلا متفرق و جوجل اوند يوفر أساسا تعديل .sln ملف المشروع ، وهو ما أريد أن تجنب من أجل أن تكون قادرة على يدويا بناء هذا المشروع في وقت لاحق - أفضل /p:OutputPath.

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

المحلول

على CCNetArtifactDirectory يتم تمريرها إلى MSBuild بشكل افتراضي ، لذلك كنت لا داعي للقلق حول هذا الموضوع.MSBuild سيتم وضع بناء الإخراج في "بن موقع" ذات الصلة إلى دليل العمل التي قمت بتحديدها.

<executable>c:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
<workingDirectory>C:\data\projects\FooSolution\</workingDirectory>
<projectFile>FooSolution.sln</projectFile>
<buildArgs>/noconsolelogger /p:Configuration=Debug </buildArgs>

لذلك في المثال أعلاه البناء الخاص بك سوف يكون الإخراج وضعت في C:\data\projects\FooSolution[ProjectName]\bin\Debug.ينبغي أن كنت ترغب في إخراج إلى موقع آخر قد ترغب في النظر في العلامة في CCNET.

<publishers>
  <xmllogger />
  <buildpublisher>
    <sourceDir>C:\data\projects\FooSolution\FooProject\bin\Debug</sourceDir>
    <publishDir>C:\published\FooSolution\</publishDir>
    <useLabelSubDirectory>false</useLabelSubDirectory>
  </buildpublisher>
</publishers>

هذا سوف يسمح لك بنشر الإخراج الخاص بك إلى موقع مختلف.

نصائح أخرى

يمكنك استخدام قطعة أثرية دليل متغير داخل MSBuild النصي نفسه.هنا مثال على كيف أنا على التوالي على التقدم الآن من CC.Net MSBuild النصي (هذا السيناريو هو ما CC.Net نقطة إلى هناك أيضا "بناء" المستهدفة في البرنامج النصي الذي يتضمن MSBuild مهمة ضد SLN القيام الفعلي تجميع):

<Exec
  Command='FxCopCmd.exe /project:"$(MSBuildProjectDirectory)\FXCopRules.FxCop" /out:"$(CCNetArtifactDirectory)\ProjectName.FxCop.xml"'
  WorkingDirectory="C:\Program Files\Microsoft FxCop 1.35"
  ContinueOnError="true"
  IgnoreExitCode="true"
/>

المعلمات مثل CCNetArtifactDirectory يتم تمرير البرامج الخارجية باستخدام متغيرات البيئة.فهي متوفرة في برنامج خارجي ولكنها ليست داخل CCNET التكوين.هذا غالبا ما يؤدي إلى الارتباك.

يمكنك استخدام المعالج ثابت بدلا من ذلك:

<cb:define project.artifactDirectory="C:\foo">
<project>
  <!-- [...] -->
  <artifactDirectory>$(project.artifactDirectory)</artifactDirectory>
  <!-- [...] -->
  <tasks>
    <!-- [...] -->
    <msbuild>
      <!-- [...] -->
      <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs>
      <!-- [...] -->
    </msbuild>
    <!-- [...] -->
  </tasks>
  <!-- [...] -->
</project>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top