0

在将面向 .Net 4.0 的有效 Visual Studio 2010 解决方案从 Windows 7 迁移到 Windows 10 环境时,我遇到了 CS0234 编译错误:找不到类型或命名空间名称“My-Namespace-Name”(您是否缺少 using 指令还是程序集参考?)

错误的触发似乎是在我的一个库中引用了第 3 方库https://www.nuget.org/packages/Google.Apis.ShoppingContent.v2/1.16.0.636中的类型,其中“My-Namespace-Name” ' 也被定义。编译在此库中链接的另一个库时出现错误消息。使用 NuGet 安装第 3 方库并支持 .Net 4.0。

我用两个类库创建了一个简单的测试解决方案来演示这个问题。为第一个库安装了第 3 方库。我从第一个库中的第 3 方库中声明了一个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");
        }
    }
}

第 2 个库引用第 1 个库。编译指向using ClassLibrary1 的解决方案时重现该错误;陈述:

错误 2 找不到类型或命名空间名称“ClassLibrary1”(是否缺少 using 指令或程序集引用?) c:\Visual Studio 2010\Projects\ClassLibrary1\ClassLibrary2\Class2.cs 5 7 ClassLibrary2

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。

在此先感谢您对这个问题的研究,如果您能对此有所了解,我们将不胜感激!

4

1 回答 1

1

查看您收到的其他警告,它会提示您出了什么问题

严重性代码 描述 项目文件行抑制状态
错误 CS0246 找不到类型或命名空间名称“ClassLibrary1”(是否缺少 using 指令或程序集引用?) ClassLibrary2 D:\Users\Tami\Downloads\Test\ClassLibrary2\Class2.cs 5 活动
警告 CS0169 字段“Class1.s_service”从未使用过 ClassLibrary1 D:\Users\Tami\Downloads\Test\ClassLibrary1\Class1.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,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”。类库2           
警告无法解析主要参考“D:\Users\Tami\Downloads\Test\ClassLibrary1\bin\Debug\ClassLibrary1.dll”,因为它间接依赖于框架程序集“System.Threading.Tasks,版本=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,文化=中性,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,文化=中性,PublicKeyToken=b03f5f7f11d50a3a"。类库2           

底部的 3 个警告告诉您由于间接依赖而ClassLibrary2无法引用ClassLibrary1,底部的第 4 个警告使您开始正确地解决它。

您需要在您的项目中包含以下packages.config内容ClassLibrary2

<?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 包及其所有依赖项(就像您应该这样做的那样),它也可以解决您的问题。

于 2017-04-29T00:20:46.423 回答