我正在将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应用程序引用此lib,并且具有这些资源的文件夹不会复制到输出AppX文件夹中,而只会复制到父Debug文件夹中。我的意思是,当我在调试模式下编译时,我会得到这样的结果:
现在,AppX文件夹是安装应用程序时分发给设备的唯一文件夹,因此库.dll文件本身包含在该AppX文件夹中。主应用程序的Assets文件夹也是如此。
我知道如何获得执行.dll的路径:
new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath
我希望Dictionaries文件夹与父AppX文件夹中的.dll文件位于同一个文件夹中,但这不是这里的情况,所以在故事的最后我不能消费那些我在库中需要的资产文件。
注意 :因为我知道他们的位置我知道我可以使用正确的路径,但问题是除非这些文件实际上在AppX文件夹中,否则将不会包含在将分发给用户的最终.appx文件中。
我在这里遗漏了一些明显的东西,有没有办法在编译应用程序(AppX文件夹)的实际文件夹中指定要复制的资产文件?
感谢您的帮助!
答案 0 :(得分:2)
方法1 :
您可以在postbuild事件中添加一些命令来处理副本以手动输出。
mkdir $(TargetDir)\AppX\Dictionaries
xcopy /y $(ProjectDir)Dictionaries\EN.lst $(TargetDir)AppX\Dictionaries
基本上它会在Dictionaries
文件夹中创建一个目录AppX
,然后将您的EN.lst复制到那里
编辑:我提出了另一种解决方案,您不需要建造后事件。
方法2 :
由于您正在查看.csproj
文件,因此您还可以在<Content>
标记中添加一小行:
<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
文件中
。