繁体   English   中英

在RHPL中找不到框架“ .NETFramework,Version = v4.5.1”的参考程序集

[英]The reference assemblies for framework “.NETFramework,Version=v4.5.1” were not found in RHPL

我们在RHPL版本7中安装了dotnet sdk 。当我们尝试构建项目时,出现一些构建错误。 我在Linux上的dotnet版本是1.0.4。 我们收到这样的错误

    error MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5.1" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed.
Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend. 

您的项目以.net 4.5.1为目标,在csproj中应该看起来像这样

<TargetFramework>net451</TargetFramework>

该行将针对无法在linux上编译的基于Windows桌面的.net。

您需要根据用例将项目目标设置为netstandardnetcoreapp

如果您有一个TargetFrameworks属性(在末尾注意s ),并且用分号分隔了framworks列表,则该属性可能是多目标的。 您可能会调用dotnet build /p:TargetFramework=<FrameworkHere> ,其中框架在框架列表中,并且以netstandard或netcoreapp开头。

您将无法在linux上编译netX代码,只能在netstandardnetcoreapp和其他一些晦涩的名字上进行编译。

要定位.NET Framework(与标准/核心相对),您至少需要安装Mono的一部分。 最简单的方法是简单地安装所有mono(建议版本5或更高版本)并使用其msbuild代替dotnet构建。

在某个时候,dotnet SDK应该能够自动查找和使用Mono参考程序集(cfr。https ://github.com/dotnet/sdk/issues/335 ); 那么您只需要那些,而无需完整的Mono环境。

就目前而言,如果您安装了Mono参考程序集(可能位于/usr/lib/mono/4.5.1-api类的位置),则应该能够执行dotnet build /p:FrameworkPathOverride=/usr/lib/mono/4.5.1-api 如果您是多目标用户,则可以在项目中设置<PropertyGroup>以适当地设置FrameworkPathOverride

例如:

<PropertyGroup Condition="'$(MonoReferenceAssemblies)' != ''">
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net20'">
    $(MonoReferenceAssemblies)/2.0-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net35'">
    $(MonoReferenceAssemblies)/3.5-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net40'">
    $(MonoReferenceAssemblies)/4.0-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net45'">
    $(MonoReferenceAssemblies)/4.5-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net451'">
    $(MonoReferenceAssemblies)/4.5.1-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net452'">
    $(MonoReferenceAssemblies)/4.5.2-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net46'">
    $(MonoReferenceAssemblies)/4.6-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net461'">
    $(MonoReferenceAssemblies)/4.6.1-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net462'">
    $(MonoReferenceAssemblies)/4.6.2-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net47'">
    $(MonoReferenceAssemblies)/4.7-api
  </FrameworkPathOverride>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net471'">
    $(MonoReferenceAssemblies)/4.7.1-api
  </FrameworkPathOverride>
</PropertyGroup>

这样,无论目标框架版本如何(只要已安装相关参考程序集), dotnet build /p:MonoReferenceAssemblies=/usr/lib/mono都可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM