升级到Visual Studio 2012后,MSBuild错误“CSC:错误CS2001:无法找到源文件'x'与链接文件

时间:2013-05-25 04:17:25

标签: visual-studio-2012 msbuild

自动升级.Net 4.0 Web应用程序的项目文件以使用Visual Studio 2012后,一切正常,但是在编译时我遇到了很多错误:

  

描述:无法找到源文件'.. \ .. \ .. \ .. \ .. \文件路径'

     

档案:CSC

当尝试在“VS2012的开发人员命令提示符”中使用MSBuild构建(仅传递项目完整路径,没有其他参数)时,我得到了基本相同的错误:

  

“CSC:错误CS2001:无法找到源文件'x'”

所有错误都是指位于我们代码分支中不同深度的其他Web应用程序项目中的链接文件(aspx,cs等)(这就是为什么所有'.... \'在路径的开头)

对我来说,它看起来像文件长度的问题,我在使用MSBuild在我们的CI服务器上构建项目时遇到了同样的问题,我能够通过操纵它来管理它项目文件在使用自定义脚本构建它们之前无需移动分支或减少项目的深度,我没有移动任何东西,当时重要的是使用Visual Studio 2010的开发人员可以编译一切都没有问题。我从中了解到使用MSBuild编译/构建与DevEnv / VS不同,例如MSBuild不支持构建安装项目和DevEnv。

由于VS 2012 / DevEnv 2012现在正在发生这种情况,再加上VS 2012不再支持安装项目(如msbuild),再加上VS / DevEnv在文件长度方面存在同样的问题,它看起来像VS 2012最后在引擎盖下使用msbuild或者更紧密地集成,但是我没有找到任何文章来证实这一点。

由于多种原因(大型代码库,大量项目,风险,时间,工作量等),更改分支结构/更改项目的深层现在不是一个选项。

有人在Visual Studio 2012中有针对此问题的替代解决方案或解决方法吗?

此致

P.D。:BTW我已经检查了这篇文章MSBuild error with linked files,但就像我在改变路径之前说的那样,现在不是一个选项。

9 个答案:

答案 0 :(得分:4)

尝试获取构建日志,

  

http://msdn.microsoft.com/en-us/library/vstudio/ms171470.aspx

似乎csc任务无法找到源文件。导致导入错误文件的原因之一。 所以你必须通过普通的文本编辑器编辑项目文件。

答案 1 :(得分:2)

我找到了这个问题的解决方案,当您链接文件时,msbuild识别您的相对路径并从那里返回它成为您在长路径中的路径,但是您可以在项目定义中更改它右键单击/卸载项目/并将路径从../../../更改为$(SolutionDir)/../..,直到找到要链接的文件,注意:它将字符从255扩展到300个字符。

答案 2 :(得分:1)

我知道我刚才提出这个问题,但值得一提的是,我们最终采用的方法是:

  • 找到报告为太长的文件。
  • 通过减少名称和/或的长度来减少这些文件的完整路径长度 容器文件夹的长度或减少文件夹嵌套 水平。因此减少了全路径长度。
  • 更新相关项目上已更改文件的链接(重新链接)。

这解决了Visual Studio 2012在开发人员工作站和使用MSbuild的CI / Deploy服务器上的问题。

对于我的场景,这种方法风险较小,并且比移动完整的项目/解决方案以减少文件夹嵌套级别或减少文件夹名称所需的工作量更少,并且必须更新依赖项目/解决方案的所有引用。

答案 3 :(得分:1)

好的,我今天打了这个就解决了。我通过遵循msdn教程(https://msdn.microsoft.com/en-us/library/ms379563%28v=vs.80%29.aspx)找到了它,这里有一个破坏我的命令:

csc /t:library /out:MyCodeLibrary.dll simpleType.cs

给我留言

error CS2001: Source file 't:librabry' could not be found

将原始命令更改为以下内容后,其中有效:

csc /target:library /out:MyCodeLibrary.dll simpleType.cs

我不确定为什么/ target标志的短版本会导致此错误,但我没有在网上找到任何其他地方特别注意到这个原因,所以我想在这里记录它。

答案 4 :(得分:0)

  1. 检查您是否拥有其他项目的最新版链接文件。如果Visual Studio属于另一个项目,它将不会自动获取它们。
  2. 检查链接路径是否确实正确。您可以借助SysInternals ProcMon工具监控VS.NET和MSBUILD尝试访问的文件(过滤进程名称并过滤掉所有成功)
  3. 如果您怀疑路径长度是问题(这也会在ProcMon工具中显示),您可以尝试通过链接到绝对路径(C:\ X \ Y \ Z)来缩短它们而不是相对路径(...... \ Z)。然后,链接文件的位置可以保持不变。

答案 5 :(得分:0)

我对这个问题的2美分...在我的情况下,我在一个项目中创建了一个文件(即ConfigModel),我在另一个项目中有一个指向该文件的链接,但是当我在第一个项目中重命名文件ConfigModel时以LoginModel为例,它没有重命名第二个项目中的链接,导致发生此错误。

答案 6 :(得分:0)

当我恢复到早期版本的git存储库时,我出现了这个问题。显然我没有将项目文件添加到repo中,所以当它还原时它也没有还原项目文件。我做的是清除它是通过单击项目资源管理器中丢失的文件从项目中排除丢失的.cs文件。它很容易找到,因为它标有警告三角形。然后重建整个解决方案。

答案 7 :(得分:0)

  1. 验证错误中提到的文件在相应的文件夹中是否不存在。
  2. 如果故意不存在它们,请编辑.csproj文件并删除这些文件的引用。
  3. 重新构建。

答案 8 :(得分:0)

我从其他人正在处理的项目中继承了这个问题,就我而言是一个应该由实体框架 .tt 模板生成的 .cs 文件,但由于某种原因,它不是' t,所以编译器将所有 CS2001 与此相关。我必须更新模板并手动运行它,之后一切正常。