Asp.net 如何将文件复制到主目录并部署

Asp.net 如何将文件复制到主目录并部署,asp.net,teamcity,msdeploy,webdeploy,Asp.net,Teamcity,Msdeploy,Webdeploy,我已经检查了StackOverflow和各种Google链接上发现的所有问题,但没有找到这个 我们有3个不同的服务器,需要在其中部署最后3个版本中的一个。这就是我在本地构建级别处理它的方式: <PostBuildEvent> start xcopy /Y /Q "$(TargetDir)EncompassSDKDlls\$(ConfigurationName)\*.*" "$(TargetDir)" </PostBuildEvent> 启动xcopy/Y/Q“$(

我已经检查了StackOverflow和各种Google链接上发现的所有问题,但没有找到这个

我们有3个不同的服务器,需要在其中部署最后3个版本中的一个。这就是我在本地构建级别处理它的方式:

<PostBuildEvent>
  start xcopy /Y /Q "$(TargetDir)EncompassSDKDlls\$(ConfigurationName)\*.*" "$(TargetDir)"
</PostBuildEvent>

启动xcopy/Y/Q“$(TargetDir)包含sdkdlls\$(配置名称)\*.*”$(TargetDir)
这很有效。但是,当它尝试进行部署时,会在部署之前运行它。我确实尝试过这样做:但这似乎并没有复制部署上的文件,只是复制bin目录中的原始文件

这是我上次尝试的:

<PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
        CustomCollectFiles;
        $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
        CustomCollectFiles;
        $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
    <ItemGroup>
        <_CustomFiles Include="Dlls\$(ConfigurationName)\*" />

        <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>(Filename)%(Extension)</DestinationRelativePath>
        </FilesForPackagingFromProject>
    </ItemGroup>
</Target>
<PropertyGroup>

自定义文件;
$(将所有文件复制到SingleFolderForpPackageDependson);
自定义文件;
$(将所有文件复制到SingleFolderForpPackageDependson);
(文件名)%(扩展名)

我认为您可以在构建步骤中使用TeamCity的%build.number%参数来实现某些功能

您提到需要3台不同的服务器,它们需要部署最后3个版本中的一个

我们使用%build.number%作为打包步骤的参数,打包步骤将生成一个包含内部版本号的deloyment.zip文件

考虑以下打包构建步骤:

Build Step:
Runner type: MSBuild
Step Name: Package
Build file path: <path to ASP.NET project file >.csproj
Command line parameters:
/T:Package 
/P:configuration =BUILD 
/P:DeployServiceUrl=http://build.server:8091 
/p:DeployIisAppPath="IIS_App_Name";PackageLocation ="c:\Packages\%build.number%\Iis_App_Name_%build.number%.zip" 
/p:_PackageTempDir=c:\Packages\Temp
然后,您可以使用powershell脚本,该脚本将build.number作为参数,计算最后三个版本,并将它们部署到您需要的任何服务器

例如,以下TeamCity构建步骤将部署最新版本:

Build Step: 
Runner type: MSBuild
Run : Custom Script
c:\Packages\100\Iis_App_Name_%build.number%.deploy.cmd /Y

希望这能有所帮助。

成功了。副本确实需要在生成后事件中,但是FilesForPackagingProject没有识别新文件的所有正确设置。我想发布这封信,它可以帮助未来的任何人:

<ItemGroup>
  <_CustomFiles Include="EncompassSDKDlls\$(ConfigurationName)\*" />
  <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
    <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  </FilesForPackagingFromProject>
</ItemGroup>

%(RecursiveDir)%(文件名)%(扩展名)

我最近成功地将后期构建步骤转变为预构建步骤。这一步实际上并不依赖于构建中生成的任何内容。然后,我可以使用
收集它们以进行部署。看起来您想运行后期构建步骤,但在本例中,这实际上是后期部署步骤?我说对了吗?很难理解您所说的“当它尝试进行部署时,它会在部署之前运行它”是什么意思。谢谢John,我将尝试一下。将让您知道。Domin8urMind-我正在尝试根据配置(配置告诉我正在生成哪个API版本)将文件复制到bin文件夹中,以便在部署的web服务中包含正确的API DLL。这将适用于我们控制生成号的项目,这些都是第三方库,所以我不认为这对我们有用。
<ItemGroup>
  <_CustomFiles Include="EncompassSDKDlls\$(ConfigurationName)\*" />
  <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
    <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  </FilesForPackagingFromProject>
</ItemGroup>