C# 缺少类型或命名空间,但已正确添加引用
我们正在使用VisualStudio2010,最近我们开始使用GoogleAPI。 由于不相关的原因,我们不能使用NuGet Package Manager来处理依赖项。相反,我们做的是类似的事情 我们在我们的解决方案根目录中创建了一个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
libraries
文件夹,这样我们的所有项目都将引用相同的库,这与NuGet的做法非常相似,但没有包还原或易于更新
我们在项目中添加了以下参考:
与适当的依赖项一起:
- 微软公司
- Microsoft.Bcl.Async
- Microsoft.Bcl.Build
- Microsoft.Net.Http
- Json
- 兹利布
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种可能的解决方案:
- 本地复制包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