Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 找不到MSBuild错误CS2001源文件_Visual Studio 2012_Command Line_Msbuild - Fatal编程技术网

Visual studio 2012 找不到MSBuild错误CS2001源文件

Visual studio 2012 找不到MSBuild错误CS2001源文件,visual-studio-2012,command-line,msbuild,Visual Studio 2012,Command Line,Msbuild,我正在尝试使用MSbuild在我的一个项目上执行命令行生成。解决方案和项目在VS2012中构建良好,但当我执行包含 msbuild.exe project.csproj 它失败了。有这么多的错误,我甚至不能滚动过去。它们都是相同的错误,对于不同的文件,都来自解决方案中的其他项目: CSC : error CS2001: Source file 'folder\filename.cs' cound not be found [c:\folder\project.csproj] 我还发现了其他关

我正在尝试使用MSbuild在我的一个项目上执行命令行生成。解决方案和项目在VS2012中构建良好,但当我执行包含

msbuild.exe project.csproj
它失败了。有这么多的错误,我甚至不能滚动过去。它们都是相同的错误,对于不同的文件,都来自解决方案中的其他项目:

CSC : error CS2001: Source file 'folder\filename.cs' cound not be found [c:\folder\project.csproj]

我还发现了其他关于文件名长度的问题。我试着移除路径中的每一层,但没有成功。我觉得奇怪的是,源文件路径不是相对的,即使它找不到的文件确实来自其他项目。我在这里有点不知所措。为什么我的构建失败?

听起来好像项目是为解决方案创建的,所以当您尝试在解决方案之外构建时,它们会破裂,因为解决方案是解决所有项目位置的粘合剂

如果从命令行生成解决方案,它是否有效

msbuild.exe solutionname.sln
如果是这样,请关闭VisualStudio,打开Notepad++并准备开始编辑一些XML

取消绝对路径的使用,首选解决方案根文件夹中的相对路径。

首先,在登记的根目录中创建一个名为“common.props”的公共属性文件夹,并添加以下标记:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
    <PropertyGroup>
      <SlnRoot>$( [MSBuild]::GetDirectoryNameOfFileAbove( $(MSBuildThisFileDirectory), Common.props ) )</SlnRoot>
    </PropertyGroup>
</Project>

$([MSBuild]::GetDirectoryNameOffileOver($(MSBuildThisFileDirectory),Common.props))
然后,将此标记添加到每个成员项目文件中

<PropertyGroup>
  <CommonPropsFolder>$([MSBuild]::GetDirectoryNameOfFileAbove( $(MSBuildProjectDirectory) ,Common.props))</CommonPropsFolder>
</PropertyGroup>
<Import Project="$(CommonPropsFolder)\Common.props" />

$([MSBuild]::GetDirectoryNameOffileOver($(MSBuildProjectDirectory),Common.props))
(这应该是在该节点之后出现的第一个XML节点)

现在查找受影响的.csproj文件中的所有节点。修改引用,使路径相对于解决方案根,并以新的$(SrcRoot)MsBuild属性作为前缀

e、 g。 从


{死牛肉死牛肉死牛肉死牛肉死牛肉}
普通的


{死牛肉死牛肉死牛肉死牛肉死牛肉}
普通的

现在进行测试,以确保您可以通过指定解决方案名称进行构建,然后导航到并编译单个项目。

好的,虽然这实际上可能与其他人看到的问题不同,但我解决了我的具体问题:

该项目是一个MVC4项目。MVC有一个选项,您可以在项目文件中启用该选项,将razor视图构建为编译过程的一部分,表面上,这样您可以在构建时捕获通常是运行时错误的内容

这个特性并没有得到很好的支持,当您从命令行构建时,它开始在奇怪的地方寻找东西,因为它正在进行这些中间构建。视图构建在临时目录中,然后它尝试从项目目录复制它,然后一切都崩溃了

此外,我们需要知道一些构建后事件的解决方案目录,但这与大多数人无关。我们还构建一个包,然后直接部署,以便更容易地将内容复制到它需要去的各个地方。对于更复杂的项目,Building as a package还可以正确解析项目可能具有的所有解决方案引用。为了完成起见,我把它包括在这里

这是一条使所有功能正常工作的线路:

msbuild.exe /v:q  projectName.csproj /t:Package /p:MvcBuildViews=false;SolutionDir=%SolutionDir%;DeployOnBuild=true
而真正解决问题的简单版本是:

msbuild.exe projectName.csproj /p:MvcBuildViews=false;

您是否能够解决此问题?您正在执行批处理文件。该批处理文件位于您打算构建的项目的参考位置,您可以将批处理文件内容(无任何专有信息)发布到Nick吗?+1。这可能是文件路径问题。它对我来说很好(我传递到msbuild的路径也是一个相对路径)另外,为什么其他项目都在解决方案构建中?它们是否被project.csproj引用?MsBuild将在生成依赖项之前生成被引用的项目。如果您使用TFS,则可以简单地撤消cs.proj文件,我的问题已解决。接受我自己的答案我感到很难过,但希望有我确切问题的人会满意此解决方案
msbuild.exe /v:q  projectName.csproj /t:Package /p:MvcBuildViews=false;SolutionDir=%SolutionDir%;DeployOnBuild=true
msbuild.exe projectName.csproj /p:MvcBuildViews=false;