C# 将生成过程从devenv更新为MSBuild:error allowDefinition=';机器应用';

C# 将生成过程从devenv更新为MSBuild:error allowDefinition=';机器应用';,c#,msbuild,precompile,devenv,C#,Msbuild,Precompile,Devenv,我正在使用一个遗留应用程序。由于历史记录丢失的原因,生成过程涉及使用devenv而不是msbuild进行生成 我正在使用SonarScanner.MSBuild.exe设置SonarQube。这似乎没有捕获devenv构建的任何信息/统计信息(我猜是名称中的线索),因此我希望转到MSBuild 使用“C:\Program Files(x86)\MSBuild\14.0\Bin\MSBuild.exe”solutionname.sln/p:PostBuildEvent=/p:Configurati

我正在使用一个遗留应用程序。由于历史记录丢失的原因,生成过程涉及使用
devenv
而不是
msbuild
进行生成

我正在使用
SonarScanner.MSBuild.exe
设置SonarQube。这似乎没有捕获
devenv
构建的任何信息/统计信息(我猜是名称中的线索),因此我希望转到
MSBuild

使用
“C:\Program Files(x86)\MSBuild\14.0\Bin\MSBuild.exe”solutionname.sln/p:PostBuildEvent=/p:Configuration=Debug/t:Rebuild/m
在本地开发计算机上运行以生成解决方案。但是,它在我们的生成框上失败,并出现以下错误:

path\webservice project\web.config(5):错误ASPCONFIG:在应用程序级别之外使用注册为allowDefinition='MachineToApplication'的节是错误的。此错误可能是由于未在IIS中将虚拟目录配置为应用程序造成的。[path\webservice project.metaproj]

阅读错误消息并联机研究,似乎这可能是由于使用IIS中不存在的vdir的
-v
开关调用aspnet_编译器所致

这是有道理的,IIS是在我的开发机器上配置的,但不是在构建箱上配置的(因为它是构建箱而不是应用服务器!)。理想情况下,我希望使用MSBuild获得此构建,而不必在构建框上配置IIS(这是一个选项,但对我来说不是“正确”的解决方案),也不必中断当前的构建过程(更新这是一项更大的工作,需要大量测试!)

  • 错误消息中引用的web.config没有对
    allowDefinition
    的引用

  • 在读取MSBuild输出时,.metaproj似乎正在调用
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet\u compiler.exe-v/localhost\u 2437-p path\webservice项目\-u-f-d预编译web\localhost\u 2437\
    ,因此这似乎是个可疑的问题

  • 生成输出中列出的.metaproj不存在,因此可能是由MSBuild(?)创建的临时文件
父解决方案文件具有以下条目:

 Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Projecname", "project path\", "{F7F0F1A0-B5BB-4D69-90D1-7E0B6C1B1A63}"
      ProjectSection(WebsiteProperties) = preProject
           TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.6.1"
           Debug.AspNetCompiler.VirtualPath = "/localhost_4102"
           Debug.AspNetCompiler.PhysicalPath = "path\"
           Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_4102\"
           Debug.AspNetCompiler.Updateable = "true"
           Debug.AspNetCompiler.ForceOverwrite = "true"
           Debug.AspNetCompiler.FixedNames = "false"
           Debug.AspNetCompiler.Debug = "True"
           VWDPort = "4102"
           SlnRelativePath = "path\"
      EndProjectSection
      ProjectSection(ProjectDependencies) = postProject
           ...snip...
      EndProjectSection
 EndProject
因此,这里似乎有一些预编译设置,这使得它使用导致MSBuild出错的-v设置调用aspnet_compiler.exe


我对网站项目类型或预编译没有太多经验。是否有一种方法可以关闭MSBuild的预编译而不更改当前devenv生成过程的行为?

如果删除该解决方案并从头创建新的解决方案文件,会发生什么情况?(即,没有该预项目部分的网站)。当我将现有网站添加到解决方案时,它会创建与我现有SLN中相同的
预项目
部分。我的短期解决方案是复制解决方案,删除网站项目,并将此解决方案用于msbuild。它遗漏了一些项目,但80%比0%好如果您删除该解决方案并从头创建新的解决方案文件会发生什么?(即,没有该预项目部分的网站)。当我将现有网站添加到解决方案时,它会创建与我现有SLN中相同的
预项目
部分。我的短期解决方案是复制解决方案,删除网站项目,并将此解决方案用于msbuild。它遗漏了一些项目,但80%比0%好