我正在运行VS 2017 RC4。
我将.NET Core应用程序中的引用添加到我的.NET 4.5 dll中并进行编译。当在运行时调用引用dll的行时,我得到:
registrations
此图显示要使用4.5引用,我需要使用netstandard 1.1。 https://msdnshared.blob.core.windows.net/media/2016/07/172.png
假设这是我需要的,我如何在我的.csproj中引用它?我只能在使用project.json时找到旧文档。
我尝试添加以下内容,但没有帮助:
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.'
另外,我需要添加:
<NetStandardImplicitPackageVersion>1.1</NetStandardImplicitPackageVersion>
或者我得到FileNotFoundException:无法加载文件或程序集。系统找不到指定的文件。
为什么?
以下是我的.csproj的相关部分:
<RuntimeFrameworkVersion>1.0.3</RuntimeFrameworkVersion>
答案 0 :(得分: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)System.Runtime
兼容的API,这是.NET Core所基于的。
有关兼容PCL配置文件的列表,请参阅this list(底部的PCL兼容性)
如果要引用的程序集不支持netstandard1.x
或任何支持的配置文件,则必须以.NET Framework 4.5而不是.NET Core为目标。
在你的csproj
中<TargetFramework>net45</TargetFramework>
...
<ItemGroup>
<PackageReference Include="Net45DependencyHere" Version="4.5.0" />
或者你是多目标
<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" />
您无法在.NET Core项目中自动神奇地使用任何.NET Framework 4.5库。只有PCL和netstandard1.x
个。
为了完整起见:
如果您某些您的类库/目标是兼容的PCL,那么即使他们没有定位netstandard1.x
,您也可以让nuget恢复此包。
<PropertyGroup>
<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
</PropertyGroup>
从不,我再说一遍,从不除了兼容的PCL库外,还有其他任何东西。 从不将net45
放在此处。这只会迫使NuGet下载并安装这个软件包,但它不会让它在运行时崩溃并出现类似的错误,就像你上面一样!
只有那里才能强制nuget安装已知在过渡期内使用.NET Core的软件包,直到大多数软件包都以netstandard1.x
为目标!
答案 1 :(得分:0)
我遇到了同样的问题,但是使用.NET Standard 2.0和.NET Framework 4.0程序集。解决方案是在nuget包资源管理器中以dll为目标,以.NET Standard 2.0创建一个nuget,然后将该包添加到项目中。
链接到nuget资源管理器:https://github.com/NuGetPackageExplorer/NuGetPackageExplorer