IServiceProvider在.NET Standard中不可用?

时间:2017-08-28 15:22:06

标签: xamarin.forms .net-standard

我正在尝试将PCL转换为.NET Standard 1.3并失败。我把失败归结为一个非常简单的例子,我无法理解它为什么会失败。

我有一个实现IMarkupExtension的类,只是编译一个只有该类的项目失败了:

  

“IServiceProvider”类型是在未引用的程序集中定义的。您必须添加对程序集'System.ComponentModel,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用。

为什么它试图为使用.NET Standard的Xamarin Forms库提供System.ComponentModel?这对我没用。

项目参考资料尽可能简单:

enter image description here

类实现不能更简单:

namespace OpenNETCF
{
    public sealed class ScaledDouble : IMarkupExtension
    {
        public object ProvideValue(IServiceProvider serviceProvider)
        {
            return null;
        }
    }
}

我可以通过手动编辑项目文件以包含System.ComponentModel来摆脱编译器错误,但不出所料,消费应用程序无法在运行时加载该类型。

<ItemGroup>
    <PackageReference Include="Xamarin.Forms" Version="2.3.4.267" />

    <!-- Required for IMarkupExtension and IServiceProvider to compile.  No idea why. -->
    <PackageReference Include="System.ComponentModel" Version="4.3.0" />
</ItemGroup>

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

.NET标准项目没有默认程序集。您应该添加引用或从nuget下载。

  

PM&GT; Install-Package System.ComponentModel