将面向 .Net 4.0 的工作 Visual Studio 2010 解决方案从 Windows 7 迁移到 Windows 10 环境时,我遇到了 CS0234 编译错误:找不到类型或命名空间名称"My-Namespace-Name"(是否缺少 using 指令或程序集引用?)。
错误的触发器似乎是对第三方库中类型的引用,https://www.nuget.org/packages/Google.Apis.ShoppingContent.v2/1.16.0.636 在我的一个库中也定义了"我的命名空间名称"。编译该库中链接的另一个库时出现错误消息。第三方库是使用 NuGet 安装的,并支持 .Net 4.0。
我创建了一个包含两个类库的简单测试解决方案来演示该问题。为第一个库安装了第三方库。我在第一个库中的第三方库中声明了一个类型为 ShoppingContentService的变量:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.Apis.ShoppingContent.v2;
using Google.Apis.ShoppingContent.v2.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Requests;
using log4net;
namespace ClassLibrary1
{
public class Class1
{
//comment out the following declaration the compilation error goes away
private static ShoppingContentService s_service;
public static void Method1()
{
System.Console.WriteLine("hello");
}
}
}
第二个库引用第一个库。编译指向使用 ClassLibrary1;语句的解决方案时重现了该错误:
错误 2 找不到类型或命名空间名称"ClassLibrary1" (是否缺少 using 指令或程序集 参考? c:\Visual Studio 2010\项目\类库1\类库2\类2.cs 5 7 类库2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClassLibrary1;
namespace ClassLibrary2
{
public class Class2
{
public static void Method2()
{
Class1.Method1();
}
}
}
解决方案文件可从以下位置下载: https://1drv.ms/u/s!AiZZDdaejTrJrz_9Ayngj9iTopzz
切换到VS 2017并不能解决问题,将目标框架更改为.Net 4.5也不能解决问题。
提前感谢您研究此问题,如果您对此有任何了解,我们将不胜感激!
查看您收到的其他警告,它会提示您出了什么问题
严重性代码说明项目文件行抑制状态 错误 CS0246 找不到类型或命名空间名称"ClassLibrary1"(是否缺少 using 指令或程序集引用?ClassLibrary2 D:\Users\Tami\Downloads\Test\ClassLibrary2\Class2.cs 5 Active 警告 CS0169 从不使用字段"Class1.s_service"类库 1 D:\用户\Tami\下载\测试\类库1\类 1.cs 17 活动 警告 引用 ClassLibrary1.csproj 的所有项目都必须安装 nuget 包Microsoft.Bcl.Build。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=317569。 类库2 警告 无法解析主引用"D:\Users\Tami\Downloads\Test\ClassLibrary1\bin\Debug\ClassLibrary1.dll",因为它间接依赖于框架程序集"System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",这在当前目标框架中无法解析。".NETFramework,版本=v4.0"。若要解决此问题,请删除引用"D:\Users\Tami\Downloads\Test\ClassLibrary1\bin\Debug\ClassLibrary1.dll",或者将应用程序重定向到包含"System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的框架版本。类库2 警告 无法解析主引用"D:\Users\Tami\Downloads\Test\ClassLibrary1\bin\Debug\ClassLibrary1.dll",因为它间接依赖于框架程序集"System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",这在当前目标框架中无法解析。".NETFramework,版本=v4.0"。若要解决此问题,请删除引用"D:\Users\Tami\Downloads\Test\ClassLibrary1\bin\Debug\ClassLibrary1.dll",或者将应用程序重定向到包含"System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的框架版本。类库2 警告 无法解析主引用"D:\Users\Tami\Downloads\Test\ClassLibrary1\bin\Debug\ClassLibrary1.dll",因为它间接依赖于框架程序集"System.Net.Http,版本=1.5.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a",这在当前目标框架中无法解析。".NETFramework,版本=v4.0"。若要解决此问题,请删除引用"D:\Users\Tami\Downloads\Test\ClassLibrary1\bin\Debug\ClassLibrary1.dll",或者将应用程序重定向到包含"System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"的框架版本。ClassLibrary2
底部的3 条警告告诉您,由于间接依赖关系,ClassLibrary2
无法引用ClassLibrary1
,底部的第 4 条警告会让您走上如何修复它的正确道路。
对于ClassLibrary2
项目,您需要在packages.config
中包含以下内容。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net40" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net40" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net40" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net40" />
</packages>
现在,您将能够在没有警告或错误的情况下引用ClassLibrary1
(除了The field 'Class1.s_service' is never used
错误)
附言
切换到VS 2017并不能解决问题,将目标框架更改为.Net 4.5也不能解决问题。
实际上,如果您在升级到.NET 4.5后删除了Microsoft.Bcl.Async包及其所有依赖项(就像您应该的那样),它也可以解决您的问题。