我正在使用msbuild文件,TeamCity和Web Deploy来部署我的网站,并且对于Visual Studio csproj文件中包含的文件,一切正常。除了这些文件,我还想发布一些文件,例如许可文件等,具体取决于环境。
这是我的构建文件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中的“构建文件路径”。
关于如何实现这一目标的任何建议?
答案 0 :(得分: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>
现在,如果相关文件路径确实存在问题,这应该可以解决问题。
答案 1 :(得分:0)
解决方案是在Visual Studio中更改Web项目的设置。在打包/发布Web下,我将“要部署的项目”设置为“此项目文件夹中的所有文件”。然后我添加了一个过滤器来删除所有.cs文件和其他不需要的文件。