【问题标题】:MSBuild error "CSC : error CS2001: Source File 'x' could not be found" with Linked Files after upgrading to Visual Studio 2012升级到 Visual Studio 2012 后,带有链接文件的 MSBuild 错误“CSC:错误 CS2001:找不到源文件‘x’”
【发布时间】:2013-05-20 17:25:27
【问题描述】:

在为 .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 不支持构建 Setup 项目,而 DevEnv 支持。

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

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

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

问候,

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

【问题讨论】:

  • 同样的问题,希望有人能解释一下这个问题
  • 同样的问题,除了源文件是''(空)
  • 我知道这个问题是大约一年前发布的,但我可以确认在 Visual Studio 2012 中将源文件作为链接文件引用时存在文件长度问题。我遇到了这个问题几天前神秘地,无法弄清楚为什么解决方案资源管理器能够显示文件,但编译器(CSC)在找到它们时遇到问题。希望这在 VS2013 中得到修复?
  • 这个项目的工作区映射设置如何?您是否映射团队项目根目录?分支根?分支根目录的子文件夹?去哪儿? d:\? c:\users\username\documents\Visualstudio2012\Projects?可能有办法摆脱这种情况。至于您关于更紧密的 msbuild 集成的问题,是的,Visual Studio 越来越好地集成到 msbuild 中。

标签: visual-studio-2012 msbuild


【解决方案1】:

尝试获取构建日志,

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这对我有帮助,我发现我们在 csproj 文件中指向不同的版本,并且包中没有可用的包。 VS 从来没有抱怨过,也没有拒绝它
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        【解决方案5】:

        好的,我今天解决了这个问题。我通过遵循 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 标志的短版本会导致这个错误,但我没有在网上找到任何其他地方特别指出这个原因,所以我想在这里记录一下。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

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

            【讨论】:

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-08
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-14
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多