2014-01-29 76 views
0

我正在使用msbuild文件,TeamCity和Web Deploy部署我的網站,並且一切正常,對於包含在Visual Studio csproj文件中的文件。除了這些文件,我還想根據環境發佈多個文件,例如許可證文件等。如何使用msbuild文件和TeamCity發佈其他文件?

這是我的構建文件DeployToTest.proj:

<Project DefaultTargets="Deploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
<ItemGroup> 
<LicenseSourceFiles Include="License.config"/> 
<RobotSourceFile Include="robots.txt" /> 
</ItemGroup> 

<Target Name="Build"> 
<Message Text="Starting build" /> 
<MSBuild Projects="..\..\WebApp.sln" Properties="Configuration=Test" ContinueOnError="false" /> 
<Message Text="##teamcity[buildNumber '$(FullVersion)']"/> 
<Message Text="Build successful" /> 
</Target> 

<Target Name="Deploy" DependsOnTargets="Build"> 
<Copy SourceFiles="@(LicenseSourceFiles)" DestinationFolder="..\..\wwroot"></Copy> 
<Copy SourceFiles="@(RobotSourceFile)" DestinationFolder="..\..\wwwroot"></Copy> 

<Message Text="Started deploying to test" /> 
<Exec Command="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe ..\..\wwwroot\WebApp.csproj /property:Configuration=Test /t:MsDeployPublish /p:MsDeployServiceUrl=99.99.99.99;DeployIisAppPath=MySite;username=user;password=pass;allowuntrustedcertificate=true" /> 
<Message Text="Finished deploying to test" /> 
</Target> 
</Project> 

正如你可以看到我試圖複製license.config和robots.txt的沒有任何的運氣。

這個.proj文件被選爲TeamCity中的'Build file path'。

有關我如何完成此任務的任何建議?

回答

0

要解決此問題,可能需要執行構建腳本,其詳細程度設置爲「詳細」或「診斷」級別。這應該告訴你到底爲什麼複製步驟失敗。

然而,最可能發生的問題之一可能是腳本使用相對文件路徑,這取決於將工作目錄設置爲正確的值。對於構建腳本,我更喜歡使用絕對路徑來防止任何文件路徑問題。

要獲得絕對路徑,您可以使用MSBuildProjectDirectory屬性。該屬性的值指向包含當前正在執行的MsBuild腳本的目錄的路徑。這樣,您可以更改您的MSBuild腳本是這樣的:

<Project DefaultTargets="Deploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
    <PropertyGroup> 
     <BaseDir>$(MSBuildProjectDirectory)</BaseDir> 
    </PropertyGroup> 

    <ItemGroup> 
     <LicenseSourceFiles Include="$(BaseDir)\License.config"/> 
     <RobotSourceFile Include="$(BaseDir)\robots.txt" /> 
    </ItemGroup> 

    <Target Name="Build"> 
     <Message Text="Starting build" /> 
     <MSBuild Projects="$(BaseDir)\..\..\WebApp.sln" Properties="Configuration=Test" ContinueOnError="false" /> 
     <Message Text="##teamcity[buildNumber '$(FullVersion)']"/> 
     <Message Text="Build successful" /> 
    </Target> 

    <Target Name="Deploy" DependsOnTargets="Build"> 
     <Copy SourceFiles="@(LicenseSourceFiles)" DestinationFolder="$(BaseDir)\..\..\wwroot"></Copy> 
     <Copy SourceFiles="@(RobotSourceFile)" DestinationFolder="$(BaseDir)\..\..\wwwroot"></Copy> 

     <Message Text="Started deploying to test" /> 
     <Exec Command="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe ..\..\wwwroot\WebApp.csproj /property:Configuration=Test /t:MsDeployPublish /p:MsDeployServiceUrl=99.99.99.99;DeployIisAppPath=MySite;username=user;password=pass;allowuntrustedcertificate=true" /> 
     <Message Text="Finished deploying to test" /> 
    </Target> 
</Project> 

現在,如果的確有相對文件路徑的問題這樣就可以解決問題。

+0

該文件被複制到正確的目錄,但未包含在由Web Deploy部署的軟件包中... – Kulvis

+0

@Kulvis好的。我對Web部署的經驗有限,但在這種情況下,問題可能在於部署設置。它是部署所有文件還是僅部署運行該應用程序所需的文件?您可以向我們提供部署設置嗎? – Petrik

+0

沒有其他的部署設置,然後我粘貼在我的問題。只部署csproj文件中包含的文件。所以我需要一種方法在TeamCity中包含其他文件... – Kulvis

0

解決方案是更改Visual Studio中Web項目的設置。在Package/Publish Web下,我將'要部署的項目'設置爲'此項目文件夾中的所有文件'。然後我添加了一個過濾器來刪除所有.cs文件和其他不需要的文件。

相關問題