为什么我无法在Visual Studio中整合项目sdk版本?

时间:2017-05-16 17:25:09

标签: c# .net .net-core visual-studio-2017

首先,我收到了这个构建错误,但仅限于某些机器:

  

错误CS1705汇编' ***'有身份   ' ***,版本= 1.0.0.0,文化=中立,   公钥=空'使用' System.Net.Http,Version = 4.1.1.1,   Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'哪个有更高的   版本比引用的程序集&System; Net.Http'有身份   ' System.Net.Http,Version = 4.1.1.0,Culture = neutral,   公钥= b03f5f7f11d50a3a' *** C:\ *** \ CSC 1有效

我猜,它以某种方式与SDK版本相关联。从我在“属性”窗口中看到的情况来看,在某些项目中,我有Microsoft.NETCore.App 1.1.1而其他项目有Microsoft.NETCore.App 1.1.2

包更新后,构建成功(但为什么我被迫更新所有包?)。

但是,sdk版本仍然不同。现在我尝试使用Visual Studio的这个整合功能:

enter image description here

在工具提示中说:

  

由于附加限制,以下版本无法使用   project或packages.config

如何将所有项目升级到较新的SDK?如何确保未来不打破其他机器上的构建?

3 个答案:

答案 0 :(得分:12)

如果之前手动升级了某些项目的@Service包,它们将包含@Service等元素。

原因是@Transactional(readOnly = true) @Cacheable(value = "countries", key = "#root.methodName") public List<Country> getCountries() { final StatelessSession session = sessionFactory.openStatelessSession(); final Query query = session.createQuery("from Country order by id"); final List<Country> result = query.list(); session.close(); return result; } @Transactional(readOnly = true) public long countTimeZones() { final StatelessSession session = sessionFactory.openStatelessSession(); final Long result = (Long) session.createQuery("select count(o) from TimeZone o").uniqueResult(); session.close(); return result; } @Transactional(readOnly = true) public List<Map<String, Object>> getPhotoAlbums() { final StatelessSession session = sessionFactory.openStatelessSession(); final SQLQuery query = session.createSQLQuery("select " + "cast(m.id as varchar), " + "m.name " // etc + "from media_album m " + "where m.account = :account " + "and ... " + "order by ..."); query.setParameter("account", uuidOfAccount); query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); final List<Map<String, Object>> result = query.list(); session.close(); return result; } SDK创建了一个隐式包引用。

由于隐式引用了包,因此NuGet不应该首先执行此操作,并且当前的VS更新不再允许更新隐式引用的包。

你可以在这里做两件事:

  1. 删除所有更改/设置Microsoft.NETCore.App版本的<PackageReference Update="Microsoft.NETCore.App" Version="1.1.1" />元素。然后,这将使SDK版本(包含在MSBuild / dotnet cli中)选择版本。
  2. 1 +在Microsoft.NET.Sdk个csproj文件中,设置

    PackageReference

    这将设置SDK的隐式引用将使用的版本。

  3. 1 +在Microsoft.NET.Sdk个csproj文件中,设置

    <PropertyGroup>

    然后手动安装所需版本的 <RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>

  4. 我建议使用选项1,因为它不再需要您修改csproj文件(例如,在添加新项目,重组解决方案等时)。

答案 1 :(得分:1)

在ASP.NET Core 2.0项目中遇到了相同的问题-这对我有用:

编辑您的'myproject.csproj'文件,并使用以下内容添加/更新:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch> // add this line.
  </PropertyGroup>

答案 2 :(得分:0)

正如Martin所说,我从所有项目中删除了所有NETCore PackageReference,清理,打开了Nuget Manager,并从

下载并安装了最新的sdk之后安装了我需要的版本。

https://dotnet.microsoft.com/download/visual-studio-sdks?utm_source=getdotnetsdk&utm_medium=referral