【问题标题】:How to include asset files in a .NET Standard 2.0 library?如何在 .NET Standard 2.0 库中包含资产文件?
【发布时间】:2018-03-31 12:43:02
【问题描述】:

我正在将 UWP 类库迁移到 .NET Standard 2.0 库,但在获取库中的一些资产文件时遇到了一些问题。

我已将它们包含在库项目中,位于名为“Dictionaries”的文件夹下,并将它们设置为包含在输出文件夹中。我的库 .csproj 文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    <ItemGroup>
        <Content Include="Dictionaries\EN.lst">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
    <ItemGroup>
    ...

我遇到的问题是我从 UWP 应用程序中引用了这个库,并且包含这些资产的文件夹没有复制到输出 AppX 文件夹中,而只是复制到父 Debug 文件夹中。我的意思是,当我在调试模式下编译时,我会得到这样的结果:

    • x86
      • 调试
        • AppX
        • 字典
        • ...

现在,AppX 文件夹是在设备安装应用程序时分发给设备的唯一文件夹,因此库 .dll 文件本身包含在该 AppX 文件夹中。主应用程序的 Assets 文件夹也是如此。

我知道如何获取正在执行的 .dll 的路径:

new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath

我希望 Dictionaries 文件夹与 .dll 文件位于父 AppX 文件夹中的同一文件夹中,但这里不是这种情况,所以在故事结束时我不能使用那些我在库中需要的资产文件。

注意:因为我知道它们的位置,所以我知道我可以使用正确的路径,但问题是除非这些文件实际上位于 AppX 文件夹中,否则它们不会包含在最终分发给用户的 .appx 文件中。

我在这里遗漏了一些明显的东西吗,有没有办法指定将这些资产文件复制到已编译应用程序的实际文件夹(AppX 文件夹)中?

感谢您的帮助!

【问题讨论】:

    标签: c# visual-studio uwp csproj .net-standard


    【解决方案1】:

    方法一

    您可以在构建后事件中添加一些命令来手动处理要输出的副本。

    mkdir $(TargetDir)\AppX\Dictionaries
    xcopy /y $(ProjectDir)Dictionaries\EN.lst $(TargetDir)AppX\Dictionaries  
    

    基本上它会在您的AppX 文件夹中创建一个目录Dictionaries,然后将您的EN.lst 复制到那里

    编辑:我想出了另一个不需要后期构建事件的解决方案。

    方法二

    由于您正在查看 .csproj 文件,因此您还可以在 &lt;Content&gt; 标签中添加一行:

    <Content Include="Dictionaries\EN.lst">
        <Link>AppX\Dictionaries\EN.lst</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>          
    </Content>
    

    如果您愿意,这也可以让您重命名 .lst 数据。

    请注意,如果您执行方法 2,该文件将从解决方案文件夹中消失。作为一种解决方法,您可以将其第二次添加到项目中。你会喜欢的东西

    <Content Include="Test\Data.xml">
      <Link>Test\renamed.xml</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="Test\Data.xml">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    

    之后在您的.csproj 文件中。

    【讨论】:

    • 感谢您的建议,即使我不确定这是否是我的情况下的正确解决方案,我的意思是,我不想弄乱默认的 UWP 编译工具链,因为我已经过去有很多问题,甚至没有改变任何东西。
    • @Sergio0694 我已经用第二种方法更新了我的答案,希望这更适合你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多