我们已从TFS 2010迁移到TeamCity,我们在构建解决方案文件时遇到了问题。
我们正在使用.NET 4.0。 谷歌图书馆在尝试构建时会出现.NET 4.0 + system.net.http的问题。 我们设法让这个设置在TFS(它使用MSBuild 4.0)上运行而没有错误。
App.config应该有正确的程序集:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<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="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>
<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>
</assemblyBinding>
</runtime>
我们已经尝试过: - 使用不同的跑步者类型:Visual studio,MSbuild - 直接引用所有Dll(google + system.net.http +等) - 在这些DLL上使用直接Nuget包恢复(它恢复一切正常)
构建错误是: ResolveAssemblyReference] C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1635,5):警告MSB3268:主要参考&#34; Google.Apis.Auth.PlatformServices,Version = 1.9.0.26016,Culture = neutral,processorArchitecture = MSIL&#34;无法解决,因为它间接依赖于框架程序集&System; Net.Net.Http,Version = 2.2.22.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#34;这在目前的目标框架中无法解决。 &#34; .NETFramework,版本= 4.0版&#34 ;.要解决此问题,请删除引用&#34; Google.Apis.Auth.PlatformServices,Version = 1.9.0.26016,Culture = neutral,processorArchitecture = MSIL&#34;或者将您的应用程序重新定位到包含&#34; System.Net.Http,Version = 2.2.22.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#34;。
的框架版本其次是: [07:58:29] W:[MSBuild输出] C:\ BuildAgent \ work \ dda43f1992063b18 \ Integrations \ CalendarSync \ Devices \ Google Calendar \ GoogleCalendarDevice.vb(788,78):错误BC30009:汇编需要参考&#39 ; Google.Apis,Version = 1.9.0.23042,Culture = neutral,PublicKeyToken = null&#39;包含已实施的界面&#39; Google.Apis.Requests.IDirectResponseSchema&#39;。在项目中添加一个。 [C:\ BuildAgent \工作\ dda43f1992063b18 \集成\ CalendarSync \ Severa.Integrations.CalendarSync.vbproj]
答案 0 :(得分:1)
我们现在对这个问题有非最佳解决方案。 MsBuild从以下位置找到了错误的版本:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.Net.Http.2.0.20710.0\lib\net40
C:\Program Files (x86)\Microsoft Web Tools\Packages\Microsoft.Net.Http.2.0.20710.0\lib\net40
这是错误的,因为这些位置的版本是:1.0.0.0。 如果我们用2.2.28版本替换所有这些地方它的工作原理.. 我们尝试过以下方法:
不幸的是,我们的TC代理处于共享环境中,因此我们无法在所有这些位置替换此文件。
有什么想法吗?