我正在解决这个MSBuild问题。
我们正在使用TeamCity构建一个包含两个MVC网站的解决方案。作为构建的一部分,我们将部署到构建服务器上的文件夹中。 IIS指向此文件夹,以便为管理层提供可见的集成构建。
以下是MSBuild文件中使用MSDeploy发布包的代码 - 但不是zip文件。
<Target Name="Deploy">
<MSBuild
Projects="$(SolutionFile)"
Properties="Platform=$(Platform);Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
PackageLocation=$(PackageLocation);
PackageAsSingleFile=False;
AutoParameterizationWebConfigConnectionStrings=False" />
</Target>
这里的问题是我们得到了一个非常深的文件夹结构。这是一个例子......
C:\ DEPLOY \ Archive \ Content \ C_C \ Users \ Edmond \ Documents \ Visual Studio 2008 \ CreatioGreen \ Creatio \ Code \ core \ trunk \ Website \ Website \ obj \ Release \ Package \ PackageTmp [已发布文件] < / p>
我真的想要部署到可预测的文件夹,如...
C:\ build \ website [已发布的文件] C:\ build \ mobilewebsite [已发布文件]
这就是背景。以下是具体问题。
我们在尝试使用MSDeploy发布到本地文件系统时犯了错误吗?我们基本上需要相当于VS2010“发布”功能,配置转换。我们不会尝试部署到远程IIS实例或任何东西。
有没有办法这样做但是指定发布文件夹?
我一直在尝试使用MSBuild Copy任务将文件复制到更合理的文件夹中 - 但我无法弄清楚如何使用通配符来指定我们需要采取的文件夹 - 它需要就像... ...
C:\ FolderPackageEndsUpIn [ANYFOLDERS] \网站[ANYFOLDERS] \ PackageTmp * * 的
帮助!
答案 0 :(得分:26)
如果将_PackageTempDir参数添加到MSBuild,它将为您提供与执行本地发布相同的结果。 e.g。
msbuild C:\ PathToMyProj.csproj / p:Configuration = UAT; DeployOnBuild = true; PackageAsSingleFile = False; DeployTarget = Package; _PackageTempDir = c:\ PathToMyDeploy \; AutoParameterizationWebConfigConnectionStrings = false
此命令会将我的所有文件发布到c:\ PathToMyDeploy \而不会显示疯狂的子文件夹
答案 1 :(得分:4)
您可以直接使用WebDeploy获得更加优化的结果。例如,您可以使用以下命令直接从根到根同步2个文件夹:
>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dirPath=<SourceFolder> -dest:dirPath=<DestinationFolder>
或者您可以使用iisApp提供程序而不是dirPath使WebDeploy在目标上包含IIS配置:
>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp=<SourceFolderOrIISPath> -dest:iisApp=<DestinationFolderOrIISPath>
例如,要从默认网站下的简单文件夹同步到新应用“NewApp”,您将以这种方式调用它:
>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp="d:\MyWebSite" -dest:iisApp="Default Web Site/NewApp"
然后,您可以通过直接调用WebDeploy来创建将执行同步/打包的批处理文件,并将作为构建后事件执行。
答案 2 :(得分:2)
有一个隐藏但优雅的解决方案。
在共享CI服务器上运行构建时,出于隔离原因,可能很难在c:root中打包。人们最终会更喜欢去除包装本身的深层路径。
幸运的是有一个解决方案。在.pubxml文件中添加替换规则!我在内置ms构建引擎,第2版:https://www.microsoft.com/learning/en-us/book.aspx?ID=16854
的补充中找到了它我也在此博客中找到了它:http://learnaspmvc.blogspot.se/2014/07/web-packaging-fixing-long-path-issue.html