我不确定这是一个错误还是一个正确的行为。重现:
结果:内容文件将被复制到构建时的bin / Debug文件夹中,但不会被复制/部署到bin / Debug / AppX文件夹。
我在Windows 10 Fall Creators Update上使用Visual Studio 2017 v15.4.1
答案 0 :(得分:2)
在类库中,文件会在构建时被复制,因为"复制到输出"设置为"复制如果更新",而不是因为它的构建操作是内容。
将新的.resx文件添加到类库中,然后使用设计器添加此文件(我假设它是一个图像)。
然后从UWP应用程序中使用它(NewFolder是.resx文件的包含文件夹)。
byte[] data = ClassLibrary1.NewFolder.Resource1.IMG1;
注意:我已经从此博文Announcing UWP Support for .NET Standard 2.0检查了.NET Standard 2.0的API列表,ResourceManager
具有GetObject
方法,该方法用于检索图像等二进制数据。在版本1.3中,ResourceManager
只有GetString
方法,用于检索字符串文字。因此,您需要使类库成为.NET Standard 2.0。
答案 1 :(得分:0)
结果:内容文件将被复制到构建时的bin / Debug文件夹中,但不会被复制/部署到bin / Debug / AppX文件夹。
为什么内容文件在构建时被复制,但最终没有部署?
您已将内容添加到netstandard
项目(Copy if newer
)。所以它将被复制到Debug文件夹。此行为为similar到PCL
。如果要验证它,可以将内容文件添加到Xamarin
共享项目并检查内容文件的最后一个路径。它与上述结果相同。
有关更多信息,请参阅Comparison to Portable Class Libraries。
2.如何才能正确地将内容添加到引用的项目中,以便将其部署到UWP应用程序?
由于.NET标准库与PCL
类似,因此您可以参考Xamarin.Forms
的某些文档。例如,使用EmbeddedResource
。
我已经验证了这一点。它也适用于.NET标准库。
示例强>
将图像文件添加到Standard
。
将内容文件添加到netstandard项目(将其标记为Embedded resource
并将其设置为Do not copy
)
添加对netstandard项目的引用。
Class1.cs
public class Class1
{
public static Stream GetImage()
{
var assembly = typeof(Class1).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream("ClassLibrary1.timg.jpg");
return stream;
}
}
<强>用法强>
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
BitmapImage bitmap = new BitmapImage();
var stream = Class1.GetImage();
await bitmap.SetSourceAsync(stream.AsRandomAccessStream());
MyImg.Source = bitmap;
}