问题标签 [portable-class-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
532 浏览

c# - 在可移植类中实现基于事件的异步模式

我有一些在应用程序之间共享的 c# 类库。我想创建一个 Windows 8 Style App,但它只支持 windows 8 类库或可移植类库。决定使用后者,除了异步操作之外,我已经毫无困难地移植了所有内容。

目前我的类库正在实现基于事件的异步模式

从这个例子中,一个可移植库似乎不支持System.Componenent.AsyncOperation/AsyncOperationManagerSystem.Collections.Specialized.HybridDictionary.

我的两个问题是:

1)什么是一个好的集合来代替HybridDictionary

2)我怎样才能绕过缺乏AsyncOperation/AsyncOperationManager?我需要实现完全不同的模式吗?

更新:在 VS 2012 中,我的便携式类库的目标是“.net framework 4 及更高版本”、“Silverlight 4 及更高版本”、“windows phone 7 及更高版本”、“.net for Metro 风格应用程序”。

0 投票
2 回答
4524 浏览

monodevelop - MonoDevelop:是否可以切换 PCL 的编译器?

我们正在启动一个跨平台项目,以部署到 Android 和 iOS。显然,很多代码要在两者之间共享,并且一些代码严重依赖于 .NET 框架项,例如 sqlite-net 库。

在 2 个项目之间共享代码的最佳方式 (afaik) 是使用 PCL——这样可以在解决方案中使用来自 iOS 和 Android 项目的共享代码来引用项目,并重新编译和链接所有内容很好的方式。

但是,在 MonoDevelop 中创建的 PCL 是使用 gmcs 编译器编译的,并且在这种情况下无法构建一些外部依赖项(即在这种情况下使用的框架缺少System.Func<T, TResult>,仅提供System.Func<T1, T2, ..., T9, TResult>)。MonoTouch 的编译器 (smcs) 能够完美地编译 PCL(通过将 gmcs 二进制替换为 smcs 二进制来证明)。根据我在谷歌搜索后发现的结果,gmcs 使用 2.0 .NET 框架,而 smcs 使用称为 2.1 框架的 smth,它实际上是最近的 .NET 的混合体。

问题来了:在 MonoDevelop 中构建 PCL(作为另一个项目的依赖项)时,是否可以指定使用哪个编译器?

0 投票
2 回答
668 浏览

silverlight - .NET 4.5 可移植类库:是否可以在运行时确定平台?

我有一组针对 Silverlight 和 Windows Phone 7.5 的库,在我的库中,我有一个导航解决方案,它具有通用界面但不同的实现 - 取决于平台。(SL & WP7 Navigation 非常相似,有非常细微的差别,遗憾的是无法避免)

如果我要编写一个包含我的 INavigationModel 接口 + 两个实现的可移植类库,有没有办法知道哪个平台正在调用可移植类库?这些信息将帮助我在运行时选择我的解决方案的正确实现。

干杯

编辑 也欢迎任何替代解决方案,我仍在尝试拼凑有关可移植类库的任何信息,以查看它们的能力

0 投票
2 回答
1935 浏览

mono - 带有便携式库项目的 MonoTouch 无法构建

在我使用 MonoDevelop (3.0.3.5) 创建的解决方案中,我有 3 个项目:

  1. 带有 UI 的 MonoTouch 项目,
  2. 带有 iOS 特定代码的 MonoTouch 库项目,
  3. 具有域模型的便携式库项目。

Portable Library 项目无法编译,并在 MonoDevelop 中的引用(System、System.Core、System.Xml)上显示警告符号。当我展开程序集引用时,会显示以下错误消息:

Assembly not available in .NETPortable 4.0 Profile1 Profile (in Mono 2.10.9)

此论坛主题中报告了相同的问题。

有没有人有同样的问题并且能够解决它?

更新

可以在 GitHub 上找到带有构建错误的演示解决方案(bgever/plp-build-error)

我发现虽然显示了错误消息,但基本代码可以编译并按预期工作。

但是,阻止演示解决方案编译的两种构建错误变体是:

使用通用类型System.Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,TResult>' requires10' 类型参数 (CS0305)

所以似乎Func<T, TResult>不支持 2 参数泛型重载?

使用泛型类型System.Action<T>' requires1' 类型参数 (CS0305)

所以似乎Action找不到非泛型版本?

0 投票
1 回答
319 浏览

.net - 在可移植类库中,我是否可以从其 Silverlight 定义具有在 .NET Framework 中找不到的空构造函数的类继承?

我们有一个类 WeakRef,它继承自 WeakReference。此类最初是针对标准 .NET 框架的命名空间的一部分。最近,我们迁移到 .NET 4.5 并决定使用可移植类库。我们包含了 WeakRef,但在 Silverlight 应用程序中引用它会导致以下运行时异常:

  • $exception {System.TypeInitializationException: 'AxisModel.ImageDownloadAlert' 的类型初始化程序引发了异常。---> System.TypeLoadException:类型违反了继承安全规则:'Common.WeakRef`1'。派生类型必须要么与基类型的安全可访问性相匹配,要么难以访问。如果基类具有不透明的默认构造函数,则派生类也必须具有默认构造函数,并且方法继承规则适用于这两个方法。

    在 Common.WeakRefCallbackHostCore`1..ctor(Object syncRoot)
    在 AxisModel.ImageDownloadAlert..ctor()
    在 AxisModel.ImageDownloadAlert..cctor()

    --- 内部异常堆栈跟踪结束 ---
    在 SLWebApp.App..ctor()
    的 AxisModel.ImageDownloadAlert.get_Instance()}

    System.Exception {System.TypeInitializationException}

我注意到 Silverlight 版本的 WeakReference 有一个空的默认构造函数,而标准 .NET 版本的 WeakReference 则不是这种情况。我认为这是引发异常的原因,因为 WeakRef 不包含空构造函数。问题是向此类添加空构造函数会导致我们的 WPF 应用程序出现编译错误。

有没有办法在我们的 Silverlight 和 WPF 应用程序之间共享 WeakRef 而不会导致运行时和编译错误?我正在寻找微创解决方案。

更新:

已经有一些关于在 Silverlight 中继承 WeakReference 的讨论。显然,这是不可能的,因此必须创建一个包含 WeakReference 实例的类。但是,无论是否涉及 WeakReference,是否可以从类似于 WeakReference 的类继承,因为它的 Silverlight 定义有一个空的默认构造函数,而它的 .NET Framework 定义没有?

讨论可以在这里找到:

继承的 WeakReference 在 Silverlight 中抛出 ReflectionTypeLoadException

0 投票
1 回答
2433 浏览

.net - 可移植类库和 .NET ConcurrentDictionary

查看http://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx,似乎命名空间中ConcurrentDictionary的所有朋友System.Collections.Concurrent都可以在可移植类库中使用。

但是,当我创建 F# 或 C# 可移植类库时,即使我显式添加对 的引用mscorlib.dll,使用ConcurrentDictionary.

为什么?

0 投票
1 回答
342 浏览

.net - 可移植类库中的 SafeHandleZeroOrMinusOneIsInvalid

SafeHandleZeroOrMinusOneIsInvalid 或类似类不能用于面向 .NET 4.0 和 Windows 应用商店应用的可移植类库。

有人知道为什么或如何使用它或使用不同的类吗?

是的,我想在可移植类库中加入一些不安全的东西。

0 投票
1 回答
2283 浏览

c# - 可移植类库,XmlAnyElementAttribute

Portable Class Library中,我有一个包含具有XmlAnyElement属性的成员的类。

这种类型的类在 .NET 4.0 中完美运行,所以我的代码如下:

现在的问题似乎XmlElement是 PCL 不支持该问题。那么如何在 PCL 中获得相同的结果呢?

0 投票
1 回答
545 浏览

silverlight - 是Silverlight、Windows Phone 和 Metro 是否支持?

<bindingRedirect />在完整的 .NET Framework 之外是否受支持?例如,普通的 .NET 应用程序(inapp.configweb.config)支持以下内容:

如果不支持,如何解决间接程序集引用的问题?也就是说,如果组件 A 引用组件 B 和 C,并且 B 引用 D v1.0,C 引用 D v1.1,如果我们只发布 D v1.1,我们如何确保 B 找到它的依赖关系?

0 投票
2 回答
1236 浏览

.net - 如何在依赖于可移植类库的库上成功运行 secannotate.exe?

我正在从事Autofac 项目,试图将我们所有的通用逻辑转换为可移植类库,并为特定功能添加特定于平台的库。

我的开发机器是 Windows 8 Enterprise(64 位),我安装了 VS 2012 Ultimate 和所有的装饰。我没有安装任何以前的 .NET 框架、任何其他工具或任何额外的 PCL 特定工具。这是一个干净的新虚拟机,只有基本的东西。在此配置中,所有构建和测试都运行良好。

当我尝试在依赖于可移植类库之一的 .NET 4.5(完整配置文件)库上运行secannotate.exe时,我收到一条错误消息,指示我需要 mscorlib 2.0.5.0

这是一个示例错误。PCL 是 Autofac.dll;.NET 4.5 完整的配置文件库是 Autofac.Configuration.dll。

Autofac 可移植类库的目标是:

  • .NET 4.0
  • 银光 5
  • 适用于 Windows 应用商店应用的 .NET

您可以通过创建针对这些事物的新/空 PCL 并构建它来复制问题。您会看到它引用了 mscorlib 2.0.5.0。

一些搜索让我相信这是对旧 Silverlight 程序集版本的引用,但 PCL 项目没有特定的版本引用,所以我只能想象这是由 VS 2012 PCL 工具提供的。其他人似乎通过安装在 VS 2012 之前发布的 .NET 框架更新解决了类似的问题。我实际上在我的机器上的任何地方都找不到 mscorlib 2.0.5.0。

在 dotPeek 中查看我构建的 Autofac.dll 程序集,我看到它引用:

  • mscorlib 2.0.5.0
  • 系统 2.0.5.0
  • System.ComponentModel.Composition 2.0.5.0
  • System.Core 2.0.5.0

而且,它只是一个 PCL 项目,没有直接引用任何东西。从字面上看 - .csproj 文件中没有一条参考线

如何解决这个 secannotate 问题?我需要安装什么额外的东西吗?是否有我应该添加到 secannotate 命令行的参数?