32

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

说明:找不到源文件 '..\..\..\..\..\File Path'

文件:CSC

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

“CSC:错误 CS2001:找不到源文件‘x’”

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

对我来说,这看起来像是文件 Length的问题,不久前我在使用 MSBuild 在我们的 CI 服务器上构建项目时遇到了同样的问题,我能够通过在使用自定义脚本构建项目文件之前对其进行操作来管理它需要移动分支或减少项目的深度,我不需要移动任何东西,当时重要的是使用 Visual Studio 2010 的开发人员可以毫无问题地编译所有内容。我由此了解到,使用 MSBuild 编译/构建与使用 DevEnv/VS 不同,例如 MSBuild 不支持构建 Setup 项目,而 DevEnv 支持。

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

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

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

问候,

PD:顺便说一句,我已经用链接文件检查了这篇文章 MSBuild 错误,但就像我在更改路径之前所说的那样,它现在不是一个选项。

4

9 回答 9

4

尝试获取构建日志,

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

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

于 2013-11-28T16:00:34.713 回答
2

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

于 2015-12-16T22:37:03.967 回答
1

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

于 2014-03-29T02:27:13.317 回答
1

我知道我不久前做过这个问题,但是为了什么是值得的,我们最终采用的方法是:

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

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

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

于 2014-07-31T00:28:51.733 回答
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 标志的短版本会导致此错误,但我没有在网上找到其他任何地方专门指出此原因,所以我想在这里记录一下。

于 2015-06-04T21:25:15.620 回答
1

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

于 2015-09-16T20:09:41.637 回答
1
  1. 验证错误中提到的文件是否在相应文件夹中不存在。
  2. 如果它们不存在是故意的,请编辑 .csproj 文件并删除这些文件的引用。
  3. 再次构建。
于 2019-02-08T09:45:52.310 回答
0
  1. 检查您是否拥有来自其他项目的链接文件的最新版本。如果它们属于另一个项目,Visual Studio 不会自动获取它们。
  2. 检查链接的路径是否确实正确。您可以在 SysInternals ProcMon 工具的帮助下监视 VS.NET 和 MSBUILD 尝试访问的文件(过滤进程名称并过滤掉所有成功的文件)
  3. 如果您怀疑路径长度是问题(这在 ProcMon 工具中也可见),您可以尝试通过链接到绝对路径 (C:\X\Y\Z) 而不是相对路径 ( ......\Z)。然后链接文件的位置可以保持不变。
于 2014-01-26T11:26:43.287 回答
0

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

于 2021-05-10T10:40:32.520 回答