.NET Framework 目标错误疑难解答
Visual Studio 允许您分发轻量 .NET Framework 运行时(称为 .NET Framework 4 Client Profile),该运行时只包含 .NET Framework 4 中的二进制文件的一个子集。通过使用 .NET Framework 4 Client Profile,您可以将更小的 .NET Framework 库分发给应用程序的用户,这样,即使用户的系统上未安装完整版 .NET Framework 4,也可以运行该应用程序。
当应用程序以特定配置文件为目标时,如果您尝试引用不属于该配置文件的一部分的程序集,则可能会遇到错误。 常见错误包括以下类型:
命名空间“命名空间”中不存在类型或命名空间名称“名称”。 (是否缺少程序集引用?)
未定义类型“类型名称”。
未能解析程序集“程序集”。 该程序集未作为“配置文件”配置文件的一部分列出。
这些错误可能由不同的操作导致。 本主题包括对可能导致错误的原因的说明以及如何解决问题的说明。
有关 .NET Framework 4 Client Profile 的更多信息,请参见 .NET Framework Client Profile和如何:面向特定的 .NET Framework 版本或配置文件。
引用了 Client Profile 中未包含的程序集
如果您的应用程序尝试引用的功能包含在 .NET Framework 4 Client Profile 中所没有的程序集或依赖程序集内,则可能会出现运行时错误消息。 确切的消息取决于引用的功能所在的位置。为了消除类似错误,可以从项目中移除不正确的程序集引用,或者将项目设置为以完整的 .NET Framework 4 版(而不是 .NET Framework 4 Client Profile 子集库)为目标。
引用了以不同版本的 .NET Framework 为目标的项目或程序集
您可以创建一些应用程序,这些应用程序引用的项目或程序集以不同版本的 .NET Framework 为目标。 例如,如果您创建一个以 .NET Framework 4 Client Profile 为目标的应用程序,则该项目可以引用以 .NET Framework 2.0 版为目标的程序集。 但是,如果创建一个面向早期版本的 .NET Framework 的项目,则无法在该项目中设置对面向 .NET Framework 4 Client Profile或 .NET Framework 4 的项目或程序集的引用。 若要消除错误,请确保应用程序所针对的配置文件与应用程序引用的项目或程序集所针对的配置文件兼容。
已使项目重新以不同版本的 .NET Framework 为目标
如果更改应用程序的 .NET Framework 目标版本,则 Visual Studio 会更改某些引用。 而且,您还必须执行某些手动更新。 例如,如果您创建的应用程序中包含依赖于 .NET Framework 4 Client Profile 的资源或设置,然后您将应用程序更改为目标 .NET Framework 3.5 SP1,则可能会看到前面提到的错误之一。
关于应用程序设置的一种解决方法是,在解决方案资源管理器中,单击**“显示所有文件”,然后在 Visual Studio XML 编辑器中编辑 app.config 文件。 更改设置中的版本,使之与 .NET Framework 的版本相匹配。 例如,可以将版本设置从 4.0.0.0 改为 2.0.0.0。 类似地,对于添加了资源的应用程序,在解决方案资源管理器中,单击“显示所有文件”,展开“我的项目”(Visual Basic) 或“属性”**(C#),然后在 Visual Studio XML 编辑器中编辑 Resources.resx 文件。 将版本设置从 4.0.0.0 改为 2.0.0.0。
如果应用程序中包含图标或位图等资源,或包含数据连接字符串等设置,则还可以在**“项目设计器”中移除“设置”**页面上的所有项,然后重新添加所需的设置,来解决此问题。 有关更多信息,请参见“项目设计器” ->“设置”页。
已使项目重新以不同版本的 .NET Framework 为目标并且引用无法解析
在某些情况下,当您使项目重新以不同版本的 .NET Framework 为目标时,引用可能无法正确解析,这通常是由于对程序集的显式完全限定引用所导致。 解决方法可以是移除无法解析的引用,然后将其重新添加到项目中。 也可以编辑项目文件,以移除以下形式的引用:
<Reference Include="System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
并将其替换为简单形式:
<Reference Include="System.ServiceModel" />
提示
在关闭并重新打开项目之后,还应重新生成项目,以确保正确解析所有引用。
请参见
任务
如何:面向特定的 .NET Framework 版本或配置文件