【问题标题】:Visual Studio 2010 Can no longer build .NET v3.5Visual Studio 2010 无法再构建 .NET v3.5
【发布时间】:2011-02-17 21:05:01
【问题描述】:

我有一个针对 .NET v3.5 的 2010 年项目。莫名其妙地我无法再构建 v3.5 项目。该项目没有添加任何引用。它甚至不允许我添加对 System.Core 的引用,因为它是由“构建系统”添加的。

警告 CS1685:预定义类型“System.Func”定义在 全局中的多个程序集 别名;使用来自的定义 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll'

IFilter.cs(82,49):错误 CS0433:类型“System.Func” 存在于两个 'c:\Program Files (x86)\参考 程序集\Microsoft\Framework\v3.5\System.Core.dll' 和 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll'

4.0 似乎有什么问题,但我不太确定如何修复它。还有其他人遇到这种情况吗?

同事也有同样的问题。需要重新安装 Windows 才能解决问题

我在这个问题上打开了一个错误:https://connect.microsoft.com/VisualStudio/feedback/details/558245/warning-cs1685-when-compiling-a-v3-5-net-application-in-visual-studio-2010

如果编译器设置为详细,我会看到:

FrameworkPathOverride = C:\Windows\Microsoft.NET\Framework\v4.0.30319

这是defined

指定 mscorlib.dll 的位置 和 microsoft.visualbasic.dll。这 参数等价于 vbc.exe 的 /sdkpath 开关 编译器。

其他一些有趣的花絮:我一起创建了一个新项目,根本无法构建 v3.5。我可以毫无问题地构建 2.0、3.0、3.5 客户端配置文件、4.0 和 4.0 客户端配置文件。 VB.NET 可以构建 v3.5 但 C# 不能。我尝试重新安装 .NET 3.5、4.0 和 Visual Studio 2010,但没有成功。 Visual Studio 调试日志没有显示任何有趣的内容,并且安全模式不起作用。

试图避免重新安装 Windows...

编辑:我开始意识到其他人也面临这个问题。 LinkLinkLink


重装了好几次。 Visual Studio 卸载后不会自行清理。在我有机会重新安装我的主操作系统之前,我已经启动了一个虚拟机进行开发。

【问题讨论】:

    标签: c# .net-3.5 visual-studio-2010


    【解决方案1】:

    问题是由在此post 中所做的更改引起的。强制加载最新的 CLR 版本是导致问题的原因。小心!

    【讨论】:

    • 我有完全相同的问题,即使我删除了我在 1 中设置的 reg 键(在你链接的帖子中),甚至尝试将它们设置为值 0,我仍然无法在框架中构建3.5.您是否在不重新安装的情况下修复了它?
    【解决方案2】:

    小骗子: 打开VS210项目属性页ob build高级检查不要引用mscorlib.dll。 然后在文本编辑器中打开项目文件并添加到引用中:

    <Reference Include="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
    

    再见

    【讨论】:

      【解决方案3】:

      这里有一个建议:

      1. 清理您的解决方案并重试。如果不成功,请继续执行第 2 步。
      2. 通过右键单击项目并选择条目“卸载项目”来卸载项目
      3. 再次右键单击并选择“编辑项目”
      4. 确保您的项目以正确的框架版本为目标,查找并设置以下标记的值:
      <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
      
      1. 查看项目的参考列表:
      <ItemGroup>
          <Reference Include="System" />
          <Reference Include="System.Data" />
          <Reference Include="System.Xml" />
          <Reference Include="Microsoft.CSharp" />
          ...
      </ItemGroup>
      

      确保没有重复引用。

      我希望这会有所帮助。

      如果没有,请备份您的项目文件,删除项目并重新添加到新项目。这很可能会奏效。

      【讨论】:

      • 感谢您的提示,但该项目的目标是 3.5,而且项目文件中根本没有定义任何引用。
      【解决方案4】:

      我猜在项目或解决方案文件中可能有对 4.0 框架的引用——也许有不同的 TargetFrameworkVersion 元素。或者可能 bin 或 obj 文件夹中的某些文件不同步。

      尝试清理解决方案,甚至手动删除 bin 和 obj 文件夹的内容。如果这没有帮助,只需将当前版本与 Subversion 中的最后一个工作版本或您使用的任何版本控制系统进行比较,您应该会看到是否发生了更改。

      【讨论】:

      • 听起来不太可能,但您是否在机器配置中寻找程序集重定向?
      • 只需找到您的 Machine.config (%runtime install path%\Config\Machine.config) 并注意 元素。当我再次考虑它时,它似乎不太合乎逻辑。我认为程序集重定向是一种运行时机制,不应该影响编译器。但也许我错了。此外,您还可以使用 Windows SDK 工具中的 Fusion Log Viewer 查看程序集加载日志。
      • 似乎没什么有趣的。不过感谢您的想法。
      【解决方案5】:

      根据 Microsoft Connect 上的 this post,您可以通过在解决方案或项目文件中添加一行将 AspNetCompiler 的 ToolPath 设置为“C:\Windows\Microsoft.NET\Framework\v2. 0.50727"。

      【讨论】:

        【解决方案6】:

        我已经多次看到这个问题 - 解决方法可能非常简单。

        在我的例子中,有问题的 VS 项目包含许多虚拟目录 (20)。

        一旦再次发生这种情况,我删除了所有虚拟目录,然后一次重新创建一个,并在每次寻找此错误时重建项目。

        当我在没有编译的情况下背靠背添加两个虚拟时,错误再次出现。

        解决方案是删除最后一个 VDir,然后重新构建,恢复 Vdirs,然后重新构建。 只是通过有条不紊地重复一个可以成为“timevamp”或“sunktime”的过程发现的那些狡猾的古怪事情,这需要你一天,晚上,深夜,并可能在当地精酿啤酒厂获得优质啤酒。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-15
          • 2019-03-15
          • 1970-01-01
          • 2012-08-12
          • 1970-01-01
          • 2011-11-13
          • 2011-04-08
          相关资源
          最近更新 更多