C# UWP应用程序如何解析程序集

C# UWP应用程序如何解析程序集,c#,.net,uwp,C#,.net,Uwp,刚才注意到UWP应用程序并不包含它们引用的大多数程序集。相反,它们在安装时需要nuget manager,而且据我所知,需要将所需的依赖项直接安装到GAC中。我刚刚调用了Install Package,遇到了安装nuget的提示 因此,在我的应用程序中有win32 appservice,它被称为uwp的可信应用程序。它依赖于Newtonsoft.Json。但win32应用程序崩溃,出现无法定位程序集的错误。当然,无法找到它,因为它不在应用程序文件夹中。但是它应该如何工作呢?为什么不在广汽?此程序

刚才注意到UWP应用程序并不包含它们引用的大多数程序集。相反,它们在安装时需要nuget manager,而且据我所知,需要将所需的依赖项直接安装到GAC中。我刚刚调用了Install Package,遇到了安装nuget的提示

因此,在我的应用程序中有win32 appservice,它被称为uwp的可信应用程序。它依赖于Newtonsoft.Json。但win32应用程序崩溃,出现无法定位程序集的错误。当然,无法找到它,因为它不在应用程序文件夹中。但是它应该如何工作呢?为什么不在广汽?此程序集唯一存在的位置是C:\Windows\WinSxS\msil_hyperv-ux-ui-newtonsoftjson_31bf3856ad364e35_10.0.17134.1_none_2490c36295ddbc03,它是GAC存储。但它仍然没有解决。那么它应该如何工作呢

UPD: 下面是重现问题的示例代码:github.com/GDreyV/uwp-assemblies-test要重现问题,您需要切换到发布配置,右键单击uwp项目并选择Store-Create-App-Packages。在包准备好之后,只需安装并运行它。

正如所指出的,UWP使用.NET本机,其中包括提前(AOT)编译过程。这意味着:

对.NET运行时的所有依赖项都将被删除,因此您的最终用户永远不需要中断安装体验来获取应用程序引用的.NET Framework的特定版本。事实上,所有的.NET依赖项都打包在应用程序中,因此应用程序的行为不应该仅仅因为计算机上安装的.NET Framework发生了更改而改变


NuGet软件包未安装到GAC。它们安装在项目的本地。我推荐文档:是的,我明白这一点。但它似乎与UWP包的工作方式不同。这只是我对UWP流量的猜测,因为我没有找到任何文档说明它是如何工作的。我知道软件包需要nuget,并且库不在应用程序的文件夹中。所以我不了解nuget安装软件包的方式和位置,以及它们是如何解决的?使用UWP并没有什么不同。您可能会混淆旧项目与PackageReference的工作方式。您不需要知道NuGet安装的程序集位于何处。明确引用它们不是正确的方法。我并没有明确地引用它们。问题是,与uwp app一起分发的appservice(win32可执行文件)使用相同的引用,无法找到它们,因为它们不存在于应用程序文件夹中。uwp应用程序在打包时是AOT(通过.NET本机),因此您无法依赖uwp项目的依赖项。您可以尝试使用ILMerge或IL Repack将控制台应用程序的依赖项捆绑在一起。顺便说一句,不要使用术语“Win32”,因为它通常意味着VB6或VC++项目。