我们在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.
答案 0 :(得分:4)
你的项目目标是.net 4.5.1,在csproj中应该有类似的东西
<TargetFramework>net451</TargetFramework>
该行将针对基于Windows桌面的.net,它不能在linux上编译。
根据您的使用情况,您需要让项目定位netstandard
或netcoreapp
。
如果您有一个TargetFrameworks
属性(请注意最后的s
)并使用分号分隔的framworks列表,那么它可能是多目标的。您可以调用dotnet build /p:TargetFramework=<FrameworkHere>
框架在框架列表中,并以netstandard或netcoreapp开头。
您将无法在Linux上编译netX代码,只能编译netstandard
,netcoreapp
以及其他一些模糊的标记。
答案 1 :(得分:0)
要定位.NET框架(而不是标准/核心),您需要安装至少部分Mono。 最简单的方法是简单地安装所有mono(推荐的版本5或更高版本)并使用其msbuild而不是dotnet build。
在某些时候,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
都可以工作(只要安装了相关的参考组件)。