在TFS上使用MsBuild构建部署包之前,将文件复制到源代码中

时间:2015-11-26 11:32:29

标签: visual-studio visual-studio-2012 tfs msbuild web-deployment

我正在使用TFS作为构建服务器,使用MsBuild构建解决方案并将其打包到Web部署包中。

MSBuild参数:/p:CreatePackageOnPublish=true /p:DeployOnBuild=true /p:DeployTarget=Package

现在我想在构建软件包之前将几个文件复制到源文件中,因此在部署到IIS时它们将最终位于App_Data目录中。我正在考虑将其作为TFS构建的一部分,并创建了一个调用xcopy的InvokeProcess-action并将文件复制到SourcesDirectory中,但它们不会出现在构建的zip-package中。 / p>

我应该在哪个目录中复制文件,以及构建过程中的位置? 有更好的方法吗?我在考虑项目文件中的Post Build事件,但我只想让它由特定的TFS构建运行,而不是所有构建。

1 个答案:

答案 0 :(得分:3)

我在项目文件中使用此挂钩部署特定的js版本化文件:

<!--Hook to deploy add files -->
<PropertyGroup>
    <CollectFilesFromContentDependsOn>
        AddFilesToDeploy;
        $(CollectFilesFromContentDependsOn);
    </CollectFilesFromContentDependsOn>
</PropertyGroup>
<!--Add files to deploy -->
<Target Name="AddFilesToDeploy">
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
        <Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
    </GetAssemblyIdentity>
    <ItemGroup>
        <JsFile Include="script\myApp.min-%(CurrentAssembly.Version).js" />
        <FilesForPackagingFromProject Include="%(JsFile.Identity)">
            <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
        </FilesForPackagingFromProject>
    </ItemGroup>
</Target>

如果我记得,这对于tfs构建不起作用,因为在此过程中没有执行CollectFilesFromContent,所以我在post build事件中复制了文件:

if not '$(TeamFoundationServerUrl)' == '' (
    xcopy "$(ProjectDir)script\myApp.min-@(VersionNumber).js" "$(OutDir)_PublishedWebsites\$(MSBuildProjectName)\script"
)