在 3.5 而不是 2.0 中编译的类库 - 从 Visual Studio 2008 迁移到 2013

Posted

技术标签:

【中文标题】在 3.5 而不是 2.0 中编译的类库 - 从 Visual Studio 2008 迁移到 2013【英文标题】:Class library compiling in 3.5 and not in 2.0 - Migrated from Visual Studio 2008 to 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 诊断。 【参考方案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,这是一个规则。”

以上是关于在 3.5 而不是 2.0 中编译的类库 - 从 Visual Studio 2008 迁移到 2013的主要内容,如果未能解决你的问题,请参考以下文章

#if DEBUG 指令在编译的类库中

如何在 .NET 2.0/3.5 中将(字符串)消息从一个线程异步排队到另一个线程?

如何迁移 .NET Framework 应用程序? [3.5 到 2.0]

如何调试从外部应用程序调用的类库?

可移植类库是不是适用于 .net 3.5?

安装 3.5 后卸载 .NET Framework 2.0 和 1.0 是不是安全?