use*_*923 7 msbuild f# windows-runtime win-universal-app
从Visual Studio 2013 Update 2开始,可以创建可以引用Windows运行时类型的可移植类库(PCL)(之前不可能),只要它们仅针对Windows 8.1和Windows Phone 8.1而不是其他目标.
我在C#中尝试添加一个C#类库(便携式通用应用程序)并且它可以工作,这意味着您可以使用和生成Windows运行时类型,就像项目是Windows应用程序或Windows运行时组件一样.
由于F#也支持PCL,Windows 8.1和Windows Phone 8.1是支持的目标,我想用F#PCL(如果可能的话)实现相同的目标.虽然Visual Studio 2013 Update 4不提供仅针对Windows 8.1和Windows Phone 8.1的F#PCL,但可以修改F#PCL的.fsproj文件以匹配C#PCL的.csproj文件与那些目标.使用Visual Studio创建.这需要将XML元素更改为以下内容:
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile32</TargetFrameworkProfile>
Run Code Online (Sandbox Code Playgroud)
并将以下内容添加到 <ItemGroup>
<TargetPlatform Include="WindowsPhoneApp, Version=8.1" />
<TargetPlatform Include="Windows, Version=8.1" />
Run Code Online (Sandbox Code Playgroud)
在这些更改之后,我能够在F#PCL中使用和生成Windows运行时类型,就像在C#PCL中一样(没有来自F#PCL或C#(通用)Windows应用程序中的Visual Studio的抱怨),但是当我实际运行(通用)时)Windows应用程序当在C#(通用)Windows应用程序的F#PCL中调用使用Windows运行时类型的函数时,我收到以下异常:
[application name] .exe中出现'System.IO.FileNotFoundException'类型的异常,但未在用户代码中处理
附加信息:无法加载文件或程序集'Windows,Version = 255.255.255.255,Culture = neutral,PublicKeyToken = null'或其依赖项之一.该系统找不到指定的文件.
当我检查Visual Studio的解决方案资源管理器中的引用时,C#PCL显示一个名为Windows的引用,它在F#PCL中缺失.该引用的引用属性如下所示:

我尝试通过添加手动将此引用添加到F#PCL的.fsproj文件中
<Reference Include="C:\Program Files (x86)\Microsoft SDKs\Portable\v12.0\110C4FEFF2BA61C0746933A9ED6E248D\Windows.winmd" />
Run Code Online (Sandbox Code Playgroud)
到了<ItemGroup>.在此之后,引用确实显示在解决方案资源管理器中的F#PCL中,具有以下引用属性:

但不解决问题.也就是说,我仍然得到与以前相同的例外.
我还尝试通过Visual Studio的解决方案资源管理器的上下文菜单复制和粘贴Windows引用,但它抱怨错误消息.
你知道如何正确地将Windows引用添加到F#PCL吗?这真的很棒,因为这样可以几乎完全用F#编写(通用)Windows应用程序!如果您知道这是不可能的事实,那么请您解释一下是什么阻止了这种情况发生?
编辑:改进了异常消息的格式
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |