【问题标题】:ASP.NET Website Project auto deploy with TFS 2013 buildASP.NET 网站项目使用 TFS 2013 构建自动部署
【发布时间】:2015-01-20 22:37:25
【问题描述】:

我有一个 ASP.NET Webforms 网站项目(注意这是 NOT WebApplication 项目,即没有 .csproj)。

我想将文件系统自动部署到我们的网络共享。

我创建了一个配置文件,因此有 website.publishproj 文件和配置文件 xml。

我尝试在构建定义的 MSBuild 参数中添加这个:

website.publishproj /p:DeployOnBuild=true /p:PublishProfile=MyDevProfile /p:VisualStudioVersion=12.0

我收到此错误:

MSBUILD : 错误 MSB1008: 只能指定一个项目。转变: 网站.publishproj

知道我做错了什么吗?我相信这与网站项目类型有关。

这是我读到的:How to use command line msbuild to deploy VS2012 Web Site project without precompiling it?

命令如下:

C:\Program Files (x86)\MSBuild\12.0\bin\amd64\MSBuild.exe /nologo /noconsolelogger "E:\Builds\1\TP1\MyWebsite_Dev\src\Websites\MyWebsite\MyWebsite.sln" /nr:假 /fl /flp:"logfile=E:\Builds\1\TP1\MyWebsite_Dev\src\Websites\MyWebsite\MyWebsite.log;encoding=Unicode;verbosity=normal" /p:SkipInvalidConfigurations=true website.publishproj /p:DeployOnBuild=true /p:PublishProfile=DropToDemoProfile /p:VisualStudio 版本=12.0 /m /p:OutDir="E:\Builds\1\TP1\MyWebsite_Dev\bin\" /p:VCBuildOverride="E:\Builds\1\TP1\MyWebsite_Dev\src\Websites\MyWebsite\MyWebsite.sln.vsprops" /dl:WorkflowCentralLogger,"C:\Program Files\Microsoft Team Foundation 服务器 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;BuildUri=vstfs:///Build/Build/35;IgnoreDuplicateProjects=False;InformationNodeId=13;TargetsNotLogged=GetNativeManifest,GetCopyToOutputDirectoryItems,GetTargetPath ;LogWarnings=True;TFSUrl=http://mytfs:8080/tfs/colletionname;"*WorkflowForwardingLogger,"C:\Program 文件\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"详细度=正常;" /p:BuildId="7d23530d-7349-406f-98b7-5d4f0b9f4101,vstfs:///Build/Build/35" /p:BuildLabel="MyWebsite_Dev_20141122.13" /p:BuildTimestamp="Sun, 23 2014 年 11 月 01:22:05 GMT" /p:BuildSourceVersion="LMyWebsite_Dev_20141122.13@$/TP1" /p:BuildDefinition="MyWebsite_Dev"

【问题讨论】:

    标签: asp.net tfs msbuild msdeploy web-site-project


    【解决方案1】:

    至少根据传递的参数,您正尝试将解决方案 (MyWebsite.sln) 和项目 (website.publishproj) 作为同一 MSBuild 命令的一部分同时构建。

    您可以运行msbuild website.publishproj /pp:website.pp.publishproj 来查看您可以在website.pp.publishproj 中调用哪些目标或要覆盖哪些属性。

    您可以运行set MSBUILDEMITSOLUTION=true && msbuild MyWebsite.sln 来查看您可以在MyWebsite.sln.metaprojMyWebsite.metaproj 中调用哪些目标或要覆盖哪些属性。

    您的 DeployOnBuild 命令很好并且应该可以工作,我猜您的 TFS 构建配置指向 .sln 并将 website.publishproj 作为参数而不是构建的主要目标传递,所以要么重新指向它直接构建.publishproj 或者......好吧,似乎没有任何替代方案,您可以尝试添加新配置并使用新的AspNetConfigurationMyDevProfile.AspNetCompiler.TargetPath 编辑.sln 但是你自找麻烦。

    【讨论】:

    • 第一段是有道理的。对于第 2 段和第 3 段,我不明白。还没有对 msbuild 做太多事情。第 4 段 - 我确实尝试将 website.publishproj 添加到构建项目列表中,但效果不佳。我不记得错误,但我可以再试一次并发布。假设我在解决方案级别添加了一个 .targets 文件并想添加 afterbuild 目标,该命令会是什么样子?我可以在 TFS 中设置 postbuild 脚本吗?如果是,该脚本会是什么样子?谢谢。
    • @gbs 发布来自publishproj build 的错误。 2/3 是您可能用于preparse publishprojemit sln 的命令,如果您想通读 MSBuild 实际执行的内容并查看全部可以调用的目标,可覆盖的属性等。是的,您可以拥有自定义构建脚本以及您想要的所有目标和事件,然后构建slnpublishproj,为什么不呢,命令仍然是同样,只需将文件名传递给 MSBuild 或配置 TFS 来构建它。
    • 我再次尝试将 .publishproj 添加到构建过程中,并将其从构建参数中删除。现在它似乎正在尝试部署到我的路径:\\devserver\www\dropbuild\mywebsite 但它拒绝访问该路径。我实际上向每个人授予了对该文件夹的权限,不确定我错过了什么。
    • 没关系...我添加了所有人,但忘记授予完全控制权。但是现在授予对该文件夹的访问权限而不是使用所有人的正确方法是什么。我是否要创建一个单独的帐户并在该帐户下运行 TFS Build?
    • @gbs 是的,或者您可以将其授予正在运行的任何帐户代理服务,通常是网络服务。
    【解决方案2】:

    您需要将您的网站升级为 Web 应用程序才能自动完成。

    这是一个相当简单的过程,即使在拥有数千页的网站上,我也仅在一个人的几天内完成了迁移,而不会影响其他开发人员。

    网站功能已经完善了 10 多年。虽然它仍然存在于产品中以进行反向兼容,但我不建议使用它。

    【讨论】:

    • 是的,但在那之前您是否发现上述命令有任何问题?我的大部分发现都指向我找不到的路径中的空间。构建参数方式在我的一个测试网站中确实对我有用,但不适用于我的真实网站。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2014-06-17
    • 2016-10-03
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多