C# 缺少类型或命名空间,但已正确添加引用

C# 缺少类型或命名空间,但已正确添加引用,c#,.net,visual-studio-2010,compilation,compiler-errors,C#,.net,Visual Studio 2010,Compilation,Compiler Errors,我们正在使用VisualStudio2010,最近我们开始使用GoogleAPI。 由于不相关的原因,我们不能使用NuGet Package Manager来处理依赖项。相反,我们做的是类似的事情 我们在我们的解决方案根目录中创建了一个libraries文件夹,这样我们的所有项目都将引用相同的库,这与NuGet的做法非常相似,但没有包还原或易于更新 我们在项目中添加了以下参考: 与适当的依赖项一起: 微软公司 Microsoft.Bcl.Async Microsoft.Bcl.Build M

我们正在使用VisualStudio2010,最近我们开始使用GoogleAPI。 由于不相关的原因,我们不能使用NuGet Package Manager来处理依赖项。相反,我们做的是类似的事情

我们在我们的解决方案根目录中创建了一个
libraries
文件夹,这样我们的所有项目都将引用相同的库,这与NuGet的做法非常相似,但没有包还原或易于更新

我们在项目中添加了以下参考:

与适当的依赖项一起:

  • 微软公司
  • Microsoft.Bcl.Async
  • Microsoft.Bcl.Build
  • Microsoft.Net.Http
  • Json
  • 兹利布
但是,在尝试编译我的项目时,会出现以下错误:

命名空间“Google”中不存在类型或命名空间名称“API”(是否缺少程序集引用?)

奇怪的是,在我的构建失败后,IntelliSense不会检测到任何
API
名称空间,就像编译器告诉我的那样

但是如果我删除依赖项并再次添加它,那么它就会找到它。 在此之后,如果我再次尝试编译项目,该过程将失败,IntelliSense将(再次)无法找到
API
名称空间

我们已经尝试删除临时文件,但没有成功

可能会发生什么


更新 我开始注意到一些警告:

无法解析主引用“System.Net.Http.Extensions”,因为它间接依赖于当前目标框架中无法解析的框架程序集“System.Net.Http,Version=1.5.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。“.NETFramework,版本=4.0”。要解决此问题,请删除引用“System.Net.Http.Extensions”,或将应用程序重新定位到包含“System.Net.Http,version=1.5.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”的框架版本

我目前的目标是.NETV4,我确实从项目中引用了
System.NET.Http
程序集

以下程序集将显示相同的警告:

  • Microsoft.Threading.Tasks.Extensions
  • Microsoft.Threading.Tasks
  • Google.api.PlatformServices
  • Google.api.Core
  • Google.api.Auth.PlatformServices
  • Google.api.Auth
  • Google.api
我的
System.Net.Http
是版本2.2.28.0,这解释了警告,因为
System.Net.Http.Extensions
正在查找版本1.5.0

这导致我创建了以下
app.config
,它应该会删除版本冲突:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.2.28.0" newVersion="2.2.28.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.2.13.0" newVersion="1.2.13.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.9.0" newVersion="2.6.9.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.2.28.0" newVersion="2.2.28.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>


出现相同的错误和警告。

问题似乎是类库项目中的程序集重定向。使用NuGet时不会发生这种情况,因为NuGet添加了重定向DLL的Microsoft.Bcl.Build.target文件(有关更多详细信息,请参阅)

似乎有3种可能的解决方案:

  • 使用NuGet安装软件包
  • 下载DLL并在控制台应用程序项目中引用它们,以及带有程序集重定向的app.config
  • 下载DLL并在类库中引用它们,然后执行以下操作:

    • 本地复制包Microsoft.Bcl.Build.1.0.14,并将以下内容添加到类库csproj中:

      <Import Project="..\PACKAGE_LOCATION\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\PACKAGE_LOCATION\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
      
    • 要解决此问题,必须将DLL和Microsoft.Bcl.Build.targets添加到所有引用程序集(有关详细信息,请参阅)


    希望这会有所帮助。

    您是否尝试过在每个Google dll的属性中,在引用它们的项目窗口中,将Google Api引用设置为“复制本地True”?如果存在依赖项,有时这会有所帮助。@ElvisLives是的,每个引用都设置为
    CopyLocal=True
        warning : All projects referencing MyProject.csproj must install nuget package Microsoft.Bcl.Build