【问题标题】:Error when getting a UWP package info from a Winform App?从 Winform 应用程序获取 UWP 包信息时出错?
【发布时间】:2019-06-21 23:32:52
【问题描述】:

使用 WinForm 应用程序,我试图从 Microsoft 的 Github 站点模仿 sample,该站点显示了如何使用 Windows 运行时打包 API 获取包信息。

尝试从 WinForm 应用程序获取 UWP 包信息时,我在以下代码行中遇到以下错误:Package package = Package.Current;

找不到类型或命名空间名称“Package”(您是否缺少 using 指令或程序集引用?)

问题:虽然该错误是一个著名的 C# 错误,有很多在线帖子/解决方案,但这里的上下文不同。编译器似乎在抱怨我缺少Package class 所需的程序集。但我在下面的代码中确实有using Windows.ApplicationModel; using 语句。那么可能导致错误的原因是什么?即我可能在这里遗漏了什么?

注意:为了确保包含所需的程序集,我确实在 VS2017-ver 15.9.5 上的 WinForm 项目中安装了这个 UWPDesktop NuGet 包Windows 10 Pro - Ver 8109

WinForm Appthrows error所在行的相关代码:Package package = Package.Current;

using System;
using System.Windows.Forms;
using Windows.ApplicationModel; //I added from here
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using Windows.ApplicationModel.Background;
using Windows.Foundation.Collections;
using Windows.Storage;
using Windows.Storage.Search;
using Windows.UI.Xaml;
using Windows.Management.Deployment;

namespace WinForms_to_UWP
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Package package = Package.Current;
            PackageId packageId = package.Id;

            Console.WriteLine(packageId.FullName);
        }
    }
}

来自 GitHub 的 UWP 示例项目:来自scenario1_identity.xaml.cs 的相关代码可以正常工作:

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using SDKTemplate;
using System;
using Windows.ApplicationModel;

namespace SDKTemplate
{
void GetPackage_Click(Object sender, RoutedEventArgs e)
{
    Package package = Package.Current;
    PackageId packageId = package.Id;

    String output = String.Format("Name: \"{0}\"\n" + packageId.FullName);

    OutputTextBlock.Text = output;
}

更新

另外值得注意的是,在顶部添加Using Windows..... 语句时,VS intellisense 仅识别Window.FoundationWindow.UI. 语句。对于其他Using Windows..... 语句,我必须进行硬编码——例如Windows.ApplicationModel;。然而VS2017 在我硬编码时并没有抱怨。此外,所有以Windows. 开头的Using 语句都显示为灰色,如下图所示。不确定它是否与错误有关:

【问题讨论】:

    标签: c# uwp desktop-bridge


    【解决方案1】:

    恐怕您引用的 Nuget 包已过时,可能不再维护。

    但问题很容易解决。只需添加对目标 SDK 版本的 windows.winmd 文件的引用即可。看这个截图:

    【讨论】:

    • 当我从VS2017 尝试从C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17763.0 引用时,我只看到Façade 文件夹,但没有看到您引用的Windows.winmd 文件。但是,在 Windows 资源管理器中,我可以在上述路径中看到该文件。使用 Project-->Add Reference>….. 菜单时,如何强制 VS2017 向我显示该文件?此外,我的系统是 x64 并且 x64 的 Program Files 文件夹没有 Windows Kits 文件夹 - 我不确定这是否会有所不同。
    • 您需要将文件扩展名过滤器更改为“所有文件 .”,就像我在屏幕截图中显示的那样。然后您将看到 windows.winmd 文件。我知道,这不是很明显......
    • 对不起,我应该注意你清楚显示的红色方块。现在,我可以添加您建议的参考。但是在运行Clean solution 然后Rebuild Solution 之后,我仍然得到完全相同的错误。我添加了一个 UPDATE 部分 - 以防万一。
    • 它对我有用。这是我的测试项目,你能分享你的吗? 1drv.ms/u/s!AovTwKUMywTNsOk74mT31BIZjpXwhw
    • 在家里,我用几乎相同的环境创建了相同的测试WinForm 项目并且它工作正常。工作和家庭环境的唯一区别——我能想到的——是我在工作中使用.NET Framework 4.7.2,而;在家里我使用4.6.2。但是,我怀疑这是否会对我的测试示例产生任何影响。虽然,我得到了一个不同的错误(类似于这个one)。但这需要一个不同的职位。你回答了所问的问题。如果您仍然希望我分享项目,请告诉我。
    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2018-06-20
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多