【问题标题】:Include architecture specific files in UWP application package在 UWP 应用程序包中包含特定于体系结构的文件
【发布时间】:2017-09-07 19:59:11
【问题描述】:

我正在使用 3rd 方 .NET 库,它本质上是 C++ 库的包装器。 这个库不是 NuGet 包。我只有适用于不同架构(ARM、x86、x64)的 C++ 库和托管库。

我在我的项目中引用了托管库,并创建了将正确的 C++ 库复制到构建目录的构建后事件:

xcopy /Y "$(ProjectDir)ExternalReferences\NoesisGUI\uwp_$(Platform)*.*" "$(TargetDir)"

我遇到的问题是这个 C++ 库在部署时没有复制到 AppX 文件夹,所以我得到 System.DllNotFoundException 。

在应用程序包中包含架构特定文件的正确方法是什么?

这是带有 C++ 库的项目文件夹结构:

【问题讨论】:

    标签: .net visual-studio uwp


    【解决方案1】:

    不需要编写脚本,只需将它们添加为项目的Content 会更容易。

    首先,将您的 ExternalReferences 文件夹移到项目之外。父文件夹(默认情况下是 .sln 文件所在的位置)应该没问题。

    手动编辑您的 .csproj 文件并在结束 </Project> 标记之前添加以下内容:

    <ItemGroup>
      <Content Include="..\ExternalReferences\NoesisGUI\uwp_$(Platform)\Noesis.dll">
        <Link>Noesis.dll</Link>
      </Content>
    </ItemGroup>
    

    这将在项目中包含 Noesis.dll 文件,同时考虑到它当前正在构建的平台。

    注意:上面我使用“..\”来使用父文件夹,如果您将文件夹移动到其他位置,请务必更改此设置!

    【讨论】:

    • 其实你还需要选择Build Action to Content。但这对我不起作用,因为我有 3 个不同的库用于 3 个架构。所以我必须将它们放在子文件夹中。我已将我的文件夹结构添加到我的问题中。我只需要包含基于我正在构建的架构的正确库。
    • @Kenshin 如果将构建操作设置为“内容”,则不需要将复制到输出目录设置为“始终”,因为这几乎是默认设置
    • 当我只将复制到输出目录切换为“始终”时,文件被复制到构建目录,但在部署时没有复制到 AppX 目录。
    • 啊,很公平,我忘记了包裹! :) 然后更新我的答案!
    • 谢谢佩德罗·拉马斯,您的更新答案解决了我的问题。奇怪的是,Visual Studio 没有针对此要求的任何内置配置设置。
    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2016-08-26
    • 2023-03-06
    • 1970-01-01
    • 2018-01-02
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多