TFS Build Server无法使发布配置文件起作用:“找不到有效的AspnetCompilerPath”

时间:2014-04-28 12:25:11

标签: asp.net visual-studio tfs msbuild

我有一堆Web项目的解决方案,我希望我的构建服务器自动为每个项目创建包。 我能够(几乎)一切正常。 构建很好,并且将在每个构建上创建包。 但只有当我没有在MSBuild参数中指定PublishProfile时。 因此它只会插入默认值而不会预编译我的网站等。 (参数为/p:DeployOnBuild=True /p:IsAutoBuild=True /p:VisualStudioVersion=12.0

但是我想使用我在Visual Studio中创建的发布配置文件(.pubxml)。 每个项目都有一个“Test.pubxml”。 但是当我指定PublishProfile参数时,构建将失败并显示以下错误消息(参数为/p:DeployOnBuild=True;PublishProfile=Test /p:IsAutoBuild=True /p:VisualStudioVersion=12.0):

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets (411): Can't find the valid AspnetCompilerPath

是的,文件Microsoft.Web.Publishing.AspNetCompileMerge.targets确实存在于该文件夹中。 我可以在我的开发人员计算机上部署Visual Studio中的项目。

我使用以下内容: Windows Server 2012 R2 Visual Studio Ultimate 2013 Update 1(安装在构建服务器上) 项目适用于.Net 4.5.1

2 个答案:

答案 0 :(得分:12)

我遇到了同样的问题,发现了这个问题,并提出了一个稍微不那么苛刻的解决方案:

只需添加/P:Framework40Dir=c:\windows\microsoft.net\framework\v4.0.30319作为额外的MSBuild参数。

无需编辑.targets文件或设置其他任何内容。为我工作,所以我只是这样做:

msbuild MyWebProject.csproj /T:Package /P:PublishProfile=MyProfile /P:Framework40Dir=(as above)

我用它来构建一个Web Deploy包到我选择的子文件夹中 - 没有配置文件,它会转到obj/debug/package。谁使用obj? Blergh:)

答案 1 :(得分:5)

我遇到了同样的错误并且通过一些黑客攻击它。

我编辑了 Microsoft.Web.Publishing.AspNetCompileMerge.targets 文件。

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 中找到 AspnetCompilerPath 节点并将 $(Framework40Dir)替换为

我想你可以在文件的前面设置$(Framework40Dir)的值。

我建议在更改之前创建该文件的备份(该文件顶部还有一条注释,表明这一点)。

我猜测正确的解决方案是设置一些环境变量或注册表值。