我们正在使用Visual Studio 2010,最近我们开始使用Google API。 由于不相关的原因,我们无法使用NuGet Package Manager来处理依赖项。相反,我们所做的是类似的事情。
我们在解决方案根目录中创建了一个libraries
文件夹,因此我们所有的项目都会引用相同的库,几乎就是NuGet所做的,但没有包恢复或更新的简便性。
我们在项目中添加了以下参考资料:
与适当的依赖关系一起:
但是,在尝试编译项目时,会出现以下错误:
类型或命名空间名称' Apis'名称空间中不存在Google' (你错过了一个程序集引用吗?)
奇怪的是,在我的构建失败后,IntelliSense无法检测到任何Apis
命名空间,正如编译器告诉我的那样。
但是,如果我删除依赖项并再次添加它,那么它会找到它。
在此之后,如果我再次尝试编译项目,则该过程将失败,并且IntelliSense将(再次)无法找到Apis
命名空间。
我们已经尝试删除临时文件,但没有运气。
可能会发生什么?
我开始注意到一些警告:
主要参考" System.Net.Http.Extensions"无法解决,因为它对框架程序集具有间接依赖性; System.Net.Http,Version = 1.5.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"这在目前的目标框架中无法解决。 " .NETFramework,Version = 4.0"。要解决此问题,请删除引用" System.Net.Http.Extensions"或者将您的应用程序重新定位到包含" System.Net.Http,Version = 1.5.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"
的框架版本
我目前的目标是.NET v4,我确实从项目中引用了System.Net.Http
程序集。
以下程序集显示相同的警告:
我的System.Net.Http
版本 2.2.28.0 ,它解释了警告,因为System.Net.Http.Extensions
正在寻找版本 1.5.0.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>
出现相同的错误和警告。
答案 0 :(得分:1)
问题似乎与类库项目中的程序集重定向有关。使用NuGet时不会发生这种情况,因为NuGet添加了重定向DLL的Microsoft.Bcl.Build.target文件(有关详细信息,请参阅this question)。
似乎有3种可能的解决方案:
下载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')" />
(将PACKAGE_LOCATION替换为Microsoft.Bcl.Build.1.0.14包的位置)
如果其他项目引用了您的类库,则会出现错误:
warning : All projects referencing MyProject.csproj must install nuget package Microsoft.Bcl.Build
要解决此问题,您必须将DLL和Microsoft.Bcl.Build.targets添加到所有引用程序集(有关详细信息,请参阅this)。
希望这有帮助。