库中的内容未部署到UWP应用

时间:2017-10-26 08:34:23

标签: .net visual-studio uwp

我不确定这是一个错误还是一个正确的行为。重现:

  • (在Visual Studio中)创建UWP项目
  • 创建netstandard项目
  • 将内容文件添加到netstandard项目(标记为'内容' 将其设置为'如果更新则复制')
  • 来自UWP项目添加对netstandard项目的引用
  • 以调试模式运行(不使用.NET Native工具链)

结果:内容文件将被复制到构建时的bin / Debug文件夹中,但不会被复制/部署到bin / Debug / AppX文件夹。

  1. 为什么内容文件会在构建时被复制,但它最终没有被部署?
  2. 如何正确地将内容添加到引用的项目中,以便将其部署到UWP应用程序?
  3. 如果这是一个错误,报告它的最佳位置在哪里?
  4. 我在Windows 10 Fall Creators Update上使用Visual Studio 2017 v15.4.1

2 个答案:

答案 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。

enter image description here

答案 1 :(得分:0)

  

结果:内容文件将被复制到构建时的bin / Debug文件夹中,但不会被复制/部署到bin / Debug / AppX文件夹。

     

为什么内容文件在构建时被复制,但最终没有部署?

您已将内容添加到netstandard项目(Copy if newer)。所以它将被复制到Debug文件夹。此行为为similarPCL。如果要验证它,可以将内容文件添加到Xamarin共享项目并检查内容文件的最后一个路径。它与上述结果相同。 有关更多信息,请参阅Comparison to Portable Class Libraries

  

2.如何才能正确地将内容添加到引用的项目中,以便将其部署到UWP应用程序?

由于.NET标准库与PCL类似,因此您可以参考Xamarin.Forms的某些文档。例如,使用EmbeddedResource

我已经验证了这一点。它也适用于.NET标准库。

示例 将图像文件添加到Standard

  • 将内容文件添加到netstandard项目(将其标记为Embedded resource并将其设置为Do not copy

  • 来自UWP项目的
  • 添加对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;
}