如何使用msbuild文件和TeamCity发布其他文件?

如何使用msbuild文件和TeamCity发布其他文件?,msbuild,teamcity,webdeploy,Msbuild,Teamcity,Webdeploy,我正在使用msbuild文件、TeamCity和Web Deploy来部署我的站点,对于VisualStudio csproj文件中包含的文件,一切正常。除了这些文件外,我还想根据环境发布更多的文件,如许可证文件等 这是我的生成文件DeployToTest.proj: <Project DefaultTargets="Deploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"&

我正在使用msbuild文件、TeamCity和Web Deploy来部署我的站点,对于VisualStudio 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中的“生成文件路径”


有没有关于如何完成此任务的建议?

要解决此问题,可能需要执行构建脚本,将详细程度设置为“详细”或“诊断”级别。这将确切地告诉您复制步骤失败的原因

但是,最可能的问题之一可能是脚本使用相对文件路径,这取决于工作目录是否设置为正确的值。对于构建脚本,我更喜欢使用绝对路径来防止任何文件路径问题

要获取绝对路径,可以使用属性。此属性的值指向包含当前正在执行的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>

$(MSBuildProjectDirectory)

现在,如果相对文件路径确实存在问题,这应该可以解决问题。

解决方案是在Visual Studio中更改web项目的设置。在“打包/发布Web”下,我将“要部署的项目”设置为“此项目文件夹中的所有文件”。然后,我添加了一个筛选器以删除所有.cs文件和其他不需要的文件。

该文件被复制到正确的目录,但不包括在Web Deploy部署的包中…@Kulvis Ah ok。我在web部署方面的经验有限,但在这种情况下,问题可能在于部署设置。它是部署所有文件还是只部署运行应用程序所需的文件?你能为我们提供部署设置吗?除了我在问题中粘贴的部署设置之外,没有其他部署设置。仅部署csproj文件中包含的文件。因此,我需要一种在TeamCity中包含其他文件的方法…如果MsDeploy仅复制csproj文件中的文件,那么它将仅复制csproj文件中的其他文件。因此,您可以在csproj中添加指向这些文件的链接。也可以通过msbuild脚本中的其他目标部署文件。但从你的描述来看,我认为MsDeploy不会自动提取它们。