参考.NET Core 1.1 csproj中的.NET 4.5 dll?

Kev*_*nUK 15 c# asp.net-core

我正在运行VS 2017 RC4.

我将.NET Core应用程序中的引用添加到我的.NET 4.5 dll中并进行编译.当在运行时调用引用dll的行时,我得到:

System.IO.FileNotFoundException: 'Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. The system cannot find the file specified.'
Run Code Online (Sandbox Code Playgroud)

此图显示要使用4.5引用,我需要使用netstandard 1.1. https://msdnshared.blob.core.windows.net/media/2016/07/172.png

假设这是我需要的,我如何在我的.csproj中引用它?我只能在使用project.json时找到旧文档.

我尝试添加以下但它没有帮助:

<NetStandardImplicitPackageVersion>1.1</NetStandardImplicitPackageVersion>
Run Code Online (Sandbox Code Playgroud)

另外,我需要添加:

<RuntimeFrameworkVersion>1.0.3</RuntimeFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

或者我得到FileNotFoundException:无法加载文件或程序集.该系统找不到指定的文件.

这是为什么?

以下是我的.csproj的相关部分:

<PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
<RuntimeFrameworkVersion>1.0.3</RuntimeFrameworkVersion>
  </PropertyGroup>
<ItemGroup>
    <Reference Include="My4.5dll">
      <HintPath>Dlls\My4.5dll.dll</HintPath>
    </Reference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

Tse*_*eng 14

您无法(安全地)将.NET Framework 4.5库加载到.NET Core中,因为它可能使用.NET Core中不可用的API.

仅当您的库目标portable-net45+win8(.NET Framework 4.5 Windows 8 Portable Class Profile或更高版本)时,它才能与.NET Core一起使用.因为这个特定的PCL配置文件限制了兼容(以前称为WinRT)的API System.Runtime,这是.NET Core所基于的.

有关兼容PCL配置文件的列表,请参阅此列表(底部的PCL兼容性)

如果要引用的程序集不支持netstandard1.x或不支持任何受支持的配置文件,则必须以 .NET Framework 4.5而不是.NET Core 目标.

在你的csproj

<TargetFramework>net45</TargetFramework>
...
<ItemGroup>
    <PackageReference Include="Net45DependencyHere" Version="4.5.0" />
Run Code Online (Sandbox Code Playgroud)

或者如果你多目标

<TargetFrameworks>net45;netcoreapp1.1</TargetFrameworks>
...
<ItemGroup>
    <PackageReference Condition="'$(TargetFramework)' == 'net45' Include="Net45DependencyHere" Version="4.5.0" />
    <PackageReference Condition="'$(TargetFramework)' == 'netcoreapp1.1' Include="NetCoreReplacementLibrary" Version="1.1.0" />
Run Code Online (Sandbox Code Playgroud)

您无法在.NET Core项目中自动神奇地使用任何.NET Framework 4.5库.只有PCL和netstandard1.x一个.

更新

为了完整起见:

如果您确定您的类库/包是针对兼容的PCL,那么即使它们没有定位,您也可以使nuget恢复此包netstandard1.x.

<PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

警告的话

从来没有,我再说一遍,千万不要把什么都没有,除了兼容的PCL库.永远不要放在net45这里.这将迫使NuGet下载并安装此软件包,但它不会使它在运行时崩溃并出现类似的错误,就像你上面一样!

它只是强制nuget安装包,这些包已知在过渡期间使用.NET Core,直到大多数软件包为目标netstandard1.x!