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

问题描述 投票:32回答:8

自动升级.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,但就像我在改变路径之前所说的那样现在不是一个选择。

visual-studio-2012 msbuild
8个回答
4
投票

尝试获取构建日志,

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

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


2
投票

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


1
投票

我知道我不久前就提出了这个问题,但值得一提的是,我们最终采用的方法是:

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

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

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


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标志会导致这个错误,但我没有找到任何其他地方在线注意到这个原因,所以我想在这里记录它。


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

0
投票

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


0
投票

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


0
投票
  1. 验证错误中提到的文件是否不存在于相应的文件夹中。
  2. 如果它们不存在是故意的,请编辑.csproj文件并删除这些文件的引用。
  3. 再建一次。
© www.soinside.com 2019 - 2024. All rights reserved.