.NETStandard 多目标库包在 Netstandard 2.0 项目上给我 CS0234 错误
.NETStandard multi-targeting library packages gives me CS0234 error on Netstandard 2.0 project
所以我不得不重构一个项目,从.NET Framework
到Net Standard
,Net Standard
版本是2.0
,我的.NET Framework
版本是[=16] =].
我在我的 csproj 中使用多目标,因为我仍然需要 .NET Framework
中 .NET Standard
中不存在的一些功能,例如 System.Runtime.Remoting
。
我认为多目标可以解决我 Net Standard
没有包裹的问题,但它给了我这个错误:
Error CS0234 The type or namespace name 'Remoting' does not exist in
the namespace 'System.Runtime' (are you missing an assembly
reference?) Project.Standard (netstandard2.0)
这是我的 Csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net472</TargetFrameworks>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net472'">
<Reference Include="System.Runtime.Remoting" />
</ItemGroup>
</Project>
出于某种原因,我的代码无法在需要时以 .NET Framework
为目标,或者我的 Csproj 中是否缺少某些内容?
您的 CSPROJ 文件设置正确。我假设有一些源代码引用了程序集。
您需要弄清楚您在源代码中的哪个位置引用了它,并将其包围在如下所示的指令中:
public class Class1
{
public void TestMe()
{
#if NET472
var test = new System.Runtime.Remoting.Metadata.SoapAttribute();
#endif
}
}
这将确保它仅在为 .NET Framework 4.7.2 而不是 .NET Standard 编译时可见。
所以我不得不重构一个项目,从.NET Framework
到Net Standard
,Net Standard
版本是2.0
,我的.NET Framework
版本是[=16] =].
我在我的 csproj 中使用多目标,因为我仍然需要 .NET Framework
中 .NET Standard
中不存在的一些功能,例如 System.Runtime.Remoting
。
我认为多目标可以解决我 Net Standard
没有包裹的问题,但它给了我这个错误:
Error CS0234 The type or namespace name 'Remoting' does not exist in the namespace 'System.Runtime' (are you missing an assembly reference?) Project.Standard (netstandard2.0)
这是我的 Csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net472</TargetFrameworks>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net472'">
<Reference Include="System.Runtime.Remoting" />
</ItemGroup>
</Project>
出于某种原因,我的代码无法在需要时以 .NET Framework
为目标,或者我的 Csproj 中是否缺少某些内容?
您的 CSPROJ 文件设置正确。我假设有一些源代码引用了程序集。
您需要弄清楚您在源代码中的哪个位置引用了它,并将其包围在如下所示的指令中:
public class Class1
{
public void TestMe()
{
#if NET472
var test = new System.Runtime.Remoting.Metadata.SoapAttribute();
#endif
}
}
这将确保它仅在为 .NET Framework 4.7.2 而不是 .NET Standard 编译时可见。