【问题标题】:Class library compiling in 3.5 and not in 2.0 - Migrated from Visual Studio 2008 to 2013在 3.5 而不是 2.0 中编译的类库 - 从 Visual Studio 2008 迁移到 2013
【发布时间】:2016-06-14 12:02:40
【问题描述】:

我刚刚将 FW 2.0 中的一个类库从 VS2008 迁移到 VS2013。 当我尝试编译时出现问题。在 VS2013 中它不起作用,因为它告诉我引用库中包含的某些类不存在(但它们存在!我可以看到参考)

它仅在我将目标 FW 设置为 3.5 时编译,但 我应该继续使用 FW 2.0,因为 Gen.Ico 在 FW 2.0 中。

请记住,在 VS 2008 中没有发现问题。

如果我在 VS2015 上编译它,它会提供以下信息:

谢谢

【问题讨论】:

  • 一个 .NET 3.5 程序集应该能够引用和使用来自 .NET 2.0 程序集的类型就好了。您确定 Gen.ICO 库是 .NET 2.0 吗?
  • 完全确定。我想在 FW 2.0 和 VS2013 中同时拥有它们
  • 您是否尝试过创建一个新的 .NET 2.0 项目并从中引用 Gen.ICO 库,这行得通吗?那么你可以访问命名空间和类型吗?
  • 是的,它也不起作用
  • VS2013 在检查您所依赖的 所有 程序集是否符合框架目标版本方面要好得多。在 VS2008 中,您可以轻松地添加像 Gen.Ico 这样的程序集,它依赖于像 System.Core 这样的 3.5 程序集。并且永远不要在编译时偷看。而且从来没有在运行时,没有人真正拥有一台安装了only 2.0 的机器。 Fwiw,不要依赖 IntelliSense 曲线,实际编译它以在输出窗口中获取 MSBuild 诊断。

标签: c# visual-studio visual-studio-2012 visual-studio-2008 c#-2.0


【解决方案1】:

我终于找到了解决方案: 在 Gen.Ico.dll 中进行一些调查后,我发现它引用了一些使用 FW 3.5 的库,所以:

  • VS 2013 / 2015 在检查引用库的问题方面要好得多,它会抛出 VS2008 不会的错误和警告。 如果您引用了某个库,该库内部引用了来自其他框架的库,如本例 3.5:

Gen.Ico 引用了一个库,该库引用了:

    .assembly extern System.Core
     {

     .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )     //.z\V.4..
     .ver 3:5:0:0

     }

     .assembly extern System.Management.Instrumentation
     {
        .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
        .ver 3:5:0:0
     }

【讨论】:

    【解决方案2】:

    如果您右键单击项目并选择属性,在 Applicaiton 中,您可以选择要定位的框架。选择 Framework .Net 2.0,它应该可以工作。

    【讨论】:

    • 是的,我可以,但正如我所说的“我应该继续使用 Fw 2.0,这是一个规则。”
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多