MSBUILD создает _PublishedWebsites в командной строке, но не на CI Server. - PullRequest
4 голосов
/ 07 июля 2011

У меня есть некоторые проблемы с использованием MSBUILD в командной строке по сравнению с CruiseControl.NET, так как результаты отличаются, и я не могу понять, почему это будет.

При вызове MSBUILD В командной строке на моемНа локальной машине создается проект, а выходной каталог содержит набор DLL-файлов и файлов PDB, а также подкаталог _PublishedWebsites, который содержит два веб-приложения в моем решении (приложение ASP.NET MVC и веб-сервис WCF).

Пока все хорошо.

На сервере CI эта папка не создается.

Это один и тот же файл проекта msbuild, который используется для обоих, поэтому я не вижу, чтоРазница может быть.После нескольких часов поиска в Google я теперь в полной растерянности.

Я предполагаю, что на моей локальной машине в среде есть что-то, что устанавливает где-то значение по умолчанию, которого нет на сервере CI.

Есть ли какая-то конкретная опция, которую я должен установить где-нибудь для явного объяснения, чтобы MSBUILD создал папку, содержащую опубликованные веб-приложения?

ОБНОВЛЕНИЕ CCNET.config (частичный)

<cruisecontrol>
  <!-- Other projects here -->  
  <project name="My-Project Nightly Build">
    <workingDirectory>C:\CruiseControl\My-Project-Nightly</workingDirectory>
    <artifactDirectory>C:\CruiseControlArtifacts\My-Project-Nightly</artifactDirectory>

    <sourcecontrol type="multi">
      <sourceControls>
        <vsts>
          <executable>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe</executable>
          <project>$/Brand Web/</project>
          <autoGetSource>true</autoGetSource>
          <applyLabel>true</applyLabel>
          <cleanCopy>true</cleanCopy>
          <deleteWorkspace>true</deleteWorkspace>
          <server>http://company-tfs:8080/tfs/Projects</server>
          <workingDirectory>C:\CruiseControl\My-Project-Nightly\Brand Web\</workingDirectory>
          <workspace>Brand-Nightly</workspace>
        </vsts>

        <vsts>
          <executable>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe</executable>
          <project>$/Brand/Main</project>
          <autoGetSource>true</autoGetSource>
          <applyLabel>true</applyLabel>
          <cleanCopy>false</cleanCopy>
          <server>http://company-tfs:8080/tfs/Projects</server>
          <workingDirectory>C:\CruiseControl\My-Project-Nightly\Brand\Main</workingDirectory>
          <workspace>Brand-Nightly</workspace>
        </vsts>
        <vsts>
          <executable>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe</executable>
          <project>$/Generic</project>
          <autoGetSource>true</autoGetSource>
          <applyLabel>true</applyLabel>
          <cleanCopy>false</cleanCopy>
          <server>http://company-tfs:8080/tfs/Projects</server>
          <workingDirectory>C:\CruiseControl\My-Project-Nightly\Generic</workingDirectory>
          <workspace>Brand-Nightly</workspace>
        </vsts>

        <vsts>
          <project>$/ComponentA</project>
          <executable>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe</executable>
          <autoGetSource>true</autoGetSource>
          <applyLabel>true</applyLabel>
          <cleanCopy>false</cleanCopy>
          <server>http://company-tfs:8080/tfs/Projects</server>
          <workingDirectory>C:\CruiseControl\My-Project-Nightly\ComponentA</workingDirectory>
          <workspace>Brand-Nightly</workspace>
        </vsts>

        <vsts>
          <project>$/Third Party Libraries</project>
          <executable>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe</executable>
          <autoGetSource>true</autoGetSource>
          <applyLabel>true</applyLabel>
          <cleanCopy>false</cleanCopy>
          <server>http://company-tfs:8080/tfs/Projects</server>
          <workingDirectory>C:\CruiseControl\My-Project-Nightly\Third Party Libraries</workingDirectory>
          <workspace>Brand-Nightly</workspace>
        </vsts>
      </sourceControls>
    </sourcecontrol>
    <labeller type="defaultlabeller">
      <prefix>Brand-</prefix>
    </labeller>
    <triggers>
      <scheduleTrigger time="02:15" buildCondition="ForceBuild" name="BrandNightlyBuild">
      </scheduleTrigger>
    </triggers>
    <tasks>
      <msbuild>
        <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <projectFile>C:\CruiseControl\My-Project-Nightly\Brand Web\Main\Build\Nightly.build</projectFile>
        <buildArgs>/p:Configuration=Debug /p:Platform=x86 /p:TargetFramework=4.0 /p:OutputPath=C:\CruiseControl\My-Project-Nightly\output\</buildArgs>
        <timeout >360000</timeout>
      </msbuild>
    </tasks>
  </project>
</cruisecontrol>

1 Ответ

1 голос
/ 08 июля 2011

Мы сделали это таким образом. Мы создали два конфигурационных файла.

1-й конфигурационный файл

<msbuild>
      <executable>
        C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe
      </executable>
      <workingDirectory>
        Project dorecotry
      </workingDirectory>
      <projectFile>
        Path to second config file
      </projectFile>
      <timeout>600</timeout>
      <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
    </msbuild>

Второй файл конфигурации опубликует код.

2-й конфигурационный файл

<Project
        xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"
        name = "AspNetPreCompile"
        DefaultTargets = "PrecompileWeb">
        <Target Name = "PrecompileWeb">
                <AspNetCompiler
                        VirtualPath = "DeployTemp" 
                        PhysicalPath = "Path of project file"
                        TargetPath = "Path of published code"
                        Force = "true"
                        Debug = "true"
                        Updateable = "true"/>
        </Target>
</Project> 

проверьте блог

...