2014-04-28 16 views
8

我有一堆Web项目的解决方案,我希望我的构建服务器为每个项目自动创建包。 我能够(几乎)获得所有工作。 构建良好,包将在每个构建中创建。 但只有当我没有在MSBuild参数中指定PublishProfile时。 因此,它只会插入默认值,不会预编译我的网站等。 (参数是/p:DeployOnBuild=True /p:IsAutoBuild=True /p:VisualStudioVersion=12.0TFS构建服务器无法获取发布配置文件工作:“无法找到有效的AspnetCompilerPath”

但是我想使用我在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的终极2013更新1(安装生成服务器上) 项目是为.NET 4.5.1

回答

5

我得到了同样的错误,并得到周围它有点破解。

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

发现在AspnetCompilerPath节点和替换$(Framework40Dir)C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319

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

我建议在改变它之前创建文件的备份(该文件顶部的注释也提示了这一点)。

我猜想适当的解决方案是设置一些环境变量或注册表值。

+0

This Works! (显然$(Framework40Dir)被设置为msbuild目录而不是.NET框架)。 –

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部署包到我选择的子目录 - 没有轮廓,它进入obj/debug/package。谁使用obj? Blergh :)

相关问题