Tag: portable class library

为什么我在使用Microsoft.Bcl时不能在Windows Phone 7.1 MvvmCross项目中使用await关键字 – 无法等待’System.Threading.Tasks.Task?

在使用Microsoft.Bcl“Microsoft BCL Portability Pack”时,我无法在MvvmCross Windows Phone 7.1项目中使用await关键字。 我已经在GitHub上发布了我在下面描述的示例项目的代码, 并且此行发生了await错误 。 当我尝试构建包含FirstViewModel的第三个“核心”Windows可移植类库(PCL)时,我得到以下错误: Type System.Threading.Tasks.Task not awaitable under VS red squiggles, and Cannot await ‘System.Threading.Tasks.Task’ when building. 解决方案中有四个项目: 一个Windows可移植类库(PCL),其中包含一个接口,该接口引用BCL提供的“任务”对象。 一个针对OS 7.1的Windows Phone类库,它实现了上面的接口,并且还使用了BCL中的“任务”。 另一个Windows可移植类库(PCL),提供应用程序的“核心”function,包括ViewModel。 尝试引用和使用上述DLL的Windows Phone 7.1 /“7.5”应用程序。 前两个项目包含接口和接口的实现编译没有任何错误。 但第3个“核心”PCL无法使用上面显示的错误构建。 更多细节如果你想要他们: 我尝试了这个App.config“修复”,如“已知的BCL问题”中所述: http : //blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx 。但是当我添加时没有解决错误App.config只是“核心”项目,也不是我尝试将相同的App.config添加到每个项目。 我可能没有在元素中使用正确的版本,或者我只是错误地完成了App.config的操作。 解决方案中设置为以PCL为目标的每个项目在Visual Studio中都设置为“Profile104”。 那些DLL位于: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0\Profile\Profile104\ 此PCL配置文件显示为在Visual Studio项目属性中定位这些平台:.NET for Windows […]

在Windows Phone 8.1类库中创建SQLite数据库

我有一个Windows Phone 8.1类库,我想稍后添加它作为Windows Phone 8.1 App项目的参考。 该ClassLibrary应负责创建和管理自己的数据库。 我尝试在我的ClassLibrary中创建一个新的SQLiteConnection ,但它抛出以下错误: A first chance exception of type ‘System.InvalidOperationException’ occurred in SQLitePCL.DLL中A first chance exception of type ‘System.InvalidOperationException’ occurred in SQLitePCL.DLL但是,如果我在我的MainApp中执行相同的操作,一切正常。 那么,是否可以在ClassLibrary中创建一个SQLite数据库,该类库负责在没有MainApp支持的情况下创建和管理它。

命名空间’AuntieDot’中不存在类型或命名空间名称’Core’

我有4个PCL,它们都针对相同的框架: AuntieDot: AuntieDot.Authentication: AuntieDot.Core: AuntieDot.Models: 但出于某种原因,在’AuntieDot.Authentication’命名空间中使用’AuntieDot.Core.Helpers’(尽管’AuntieDot.Core’被添加为’AuntieDot.Authentication’的引用,但它说它不存在。我已经google了,我得到的唯一回复是我需要确保其他库是针对相同的框架,它们是。 我使用的唯一外部代码是JSON.net,我通过NuGet添加,所以我不认为这是问题。 ‘AuntieDot.Core’中的代码; 抛出问题的代码只是在错误列表和编译中抱怨,它没有像往常一样的Red-Underline: 我只是觉得发布Build Output可能会有所帮助; http://pastebin.com/raw.php?i=wn74UKyc

将Async CTP与可移植类库一起使用

我正在尝试将项目重写为可移植类库。 但问题是它使用的是Async CTP,我无法将其编译为WP和Windows Store App的库。 如果我不包含引用AsyncCtpLibrary.dll,编译器会说 名称空间’System.Threading’中不存在类型或命名空间名称’Tasks’(您是否缺少程序集引用?) 如果我包含它,编译器仍会说相同的错误并添加警告: 无法解析主要引用“AsyncCtpLibrary”,因为它对框架程序集“mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”具有间接依赖性,这在当前目标框架中无法解析。 ” .NETPortable,版本= V4.0,外形= Profile104″ 。 要解决此问题,请删除引用“AsyncCtpLibrary”或将应用程序重新定位到包含“mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”的框架版本。 我该怎么忍受?

为什么有些NuGet软件包同时提供了可移植库和特定于平台的软件包?

据我所知,可移植类库可以在许多平台上使用,基于库设计者选择支持的框架子集。 我注意到许多可通过NuGet获得的库也包含一个特定于平台的实现,并想知道这需要什么。 例如, Microsoft.Net.Http包附带了许多变体,包括: Net 4.0版本 WinRT(Windowsapp store应用)Windows 8版 便携式类库支持Net 4.0,WinRT等 为什么需要分发单独的.Net 4.0或WinRT版本的库? 便携式类库是否足够? 当我设计自己的自定义便携式库时,我应该遵守这个惯例吗? 为了清楚起见,我不是在讨论需要一小部分平台特定代码才能工作的可移植类库。 那些通常有一个附带的托管库,其名称以.PlatformServices结尾。 但我在谈论由NuGet包分发的核心库。

如何用Marshal.SizeOf ()替换Marshal.SizeOf(Object)?

我正在从现有代码构建一个Universal类库,并且我得到一些编译器警告,我终其无法弄清楚该怎么做。 我有这样的代码: void SomeMethod(Object data) { var size = Marshal.SizeOf(data); … } 代码构建,但在Universal项目(我猜,.NET 4.5.1及更高版本的项目)中,我得到以下编译器警告: 警告CS0618:’System.Runtime.InteropServices.Marshal.SizeOf(object)’已废弃:’SizeOf(Object)在将来的版本中可能不可用。 而是使用SizeOf ()。 但是如何使用通用无参数方法Marshal.SizeOf()在上述情况下为Marshal.SizeOf(Object)创建替换? 从理论上讲,我可能不知道什么类型的data是什么? 是因为使用Marshal.SizeOf(Object)被认为是不好的做法,它被Obsolete ? 带回家的消息应该是“完全重构代码”?

在.NET应用程序中使用PCL时,如果被调用的类包含方法,则为TypeLoadException

我正在将现有的.NET类库改编为可移植类库。 我使用配置文件78(.NET 4.5,Windows Store 8,Windows Phone 8)支持配置文件158(也针对Silverlight 5),因为我希望能够编译原始库的unsafe代码。 .NET库包含很多标记为[Serializable]的类,所以我实现了一个包含虚拟SerializableAttribute实现的支持PCL库: public class SerializableAttribute : Attribute { } 它是从主PCL库中引用的。 为了充分利用.NET应用程序中的主PCL库,同时避免类型名称冲突,我还准备了一个.NET支持库(与PCL支持库具有相同的强名称),包含类型转发声明: [assembly: TypeForwardedTo(SerializableAttribute)] 并在我的.NET应用程序中显式引用.NET支持库而不是PCL库。 在准备好所有这些并且能够成功编译PCL适配库之后,我重新使用原始.NET库中的unit testing,现在引用PCL主库和.NET支持库。 这通常非常有效,但对于包含[Serializable]类和[OnDeserialized]修饰方法的unit testing: [Serializable] public class Foo { [OnDeserialized] private void DoSomething(StreamingContext context) { } } 我得到以下TypeLoadException : 在程序集“MyPclAssembly”中键入“Foo”的方法为“DoSomething”,其序列化属性的签名不正确。 (可以注意到OnDeserializedAttribute包含在可移植子集中,可能是因为它也在[DataContract]序列化中被识别。) 在原始.NET库上运行unit testing时,我没有获得exception。 我仔细分析了Foo类中的方法签名,它完全符合这些(de-)序列化辅助方法应该具有的签名,参见例如此处 。 我也尝试将[OnDeserialized]方法的可见性更改为internal和public ,但无济于事。 使用PCL库时出现此exception的原因是什么,我该怎么做才能避免它? 编辑我已经检查了PCL库的IL代码和[OnDeserialized]方法的.NET库,我看不出任何相关的区别: PCL .method private hidebysig instance […]

触发在X毫秒后启动的操作

我正在开发一个Xamarin Forms移动应用程序,它有一个包含SearchBar,ListView和Map控件的页面。 列表视图包含一个地址列表,这些地址在地图上反映为引脚。 当用户在SearchBar中键入时,ListView会自动更新(通过ViewModel绑定)。 过滤列表数据源的ViewModel方法看起来像这样…… void FilterList() { listDataSource = new ObservableCollection( locationData.Where(l => l.Address.Contains(searchBar.Text)) ); // ***** Now, update the map pins using the data in listDataSource } 我希望更新Map,因为ListView被过滤,但不是在每个按键上,因为这可能每秒发生多次。 本质上,我想在更新Map之前在每个FilterList事件中进行“滚动暂停”。 在伪代码中…… // ***** Now, update the map pins using the data in listDataSource if (a previously-requested map update is pending) { // Cancel the […]

为什么在Ninject.Portable中没有IKernel实现

我使用和喜欢Ninject很多。 我想知道为什么”BasicKernel”中没有”BasicKernel” ? 实现IKernel是否需要PCL不包含的任何调用? 我在谈论简单的场景(关于: Bind().To()和Get() )?

可移植类库配置文件78缺少与属性相关的方法/属性

在我的PCL核心项目(WP8,Android,iOS,Xamarin,MvvmCross)中,我使用自定义属性。 Type.GetCustomAttributes()扩展方法让我检查使用的属性。 使用PCL Profile104这很有效。 但是因为我想使用async / await,我需要使用PCL Profile78(和.NET 4.5) 问题:看起来GetCustomAttributes()和Attributes属性在Profile78中不可用。 为什么?? 注意:我正在研究解决方法,方法是创建一个PCL Profile 104类库并包装GetCustomAttributes(),然后从我的PCL Profile78库中引用该库。 但是似乎不支持扩展方法…… 示例代码: public Pcl78Class() { Type t = this.GetType(); var attributes = t.Attributes; var customAttributes = t.GetCustomAttributes(true); // another weird thing: Why is VS CodeCompletion telling me it knows CustomAttributeExtensions class and methods? //System.Reflection.CustomAttributeExtensions.GetCustomAttributes(t); }