C# NET中包关系的用途是什么?

C# NET中包关系的用途是什么?,c#,.net,package,relationship,C#,.net,Package,Relationship,在.NET中,包关系(ZipPackage)到底是什么?我知道包裹是什么,但我很难理解人际关系的目的。你能举例说明我什么时候想使用它们以及它们有什么好处吗?来自(软件包类): Package是一个抽象类,可用于将对象组织成一个具有定义的物理格式的实体,以实现可移植性和高效访问 以及: PackageRelationship(“关系”)定义源包或PackagePart与目标对象之间的关联。包装关系可以是两种类型之一,每种类型可以是两种形式之一: 因此,在创建包时,如果要指示对象与包的另一部分之间存

在.NET中,包关系(ZipPackage)到底是什么?我知道包裹是什么,但我很难理解人际关系的目的。你能举例说明我什么时候想使用它们以及它们有什么好处吗?

来自(软件包类):

Package是一个抽象类,可用于将对象组织成一个具有定义的物理格式的实体,以实现可移植性和高效访问

以及:

PackageRelationship(“关系”)定义源包或PackagePart与目标对象之间的关联。包装关系可以是两种类型之一,每种类型可以是两种形式之一:

因此,在创建
包时
,如果要指示对象与包的另一部分之间存在关系,则应使用
包关系
来指示它是哪种关系


ZipPackage
也可用于处理开放式Office XML文件-在本用例中,有时指示对象之间的关系很有用。请参阅。

基本上是将事物连接在一起以便进行部署,更重要的是同时取消部署


比如说,你有一个程序,你有一个它使用的GIF包。然后,您希望GIF在安装程序时可用,并希望在卸载程序时对其进行清理。

在我看来,好的例子都有

c#中带有预览图像的opc容器示例将实现为f.e.:

using System.IO.Compression;
using System.IO.Packaging;

using (var package = Package.Open( your_Zip/OPC_File_Path, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
    // Add the Preview Image to the OPC container
    var imagePart = package.CreatePart( PackUriHelper.CreatePartUri(new Uri("preview.png", UriKind.Relative)), "image/png");
    package.CreateRelationship( imagePart.Uri, TargetMode.Internal, OpcConstants.RelationshipTypes.PREVIEWIMAGE, "preview");

    using(var imageStream = imagePart.GetStream( FileMode.Open, FileAccess.Write ))
    {
        imageStream.Write( your_preview_Image_Byte_array, 0, your_preview_Image_Byte_array.Length);
    }
}


   private byte[] GetPreviewImage(System.IO.Packaging.Package package)
   {
        if (!package.RelationshipExists("preview"))
        {
            return null;
        }

        var previewRel = package.GetRelationship("preview");
        var previewUri = PackUriHelper.CreatePartUri(previewRel.TargetUri);

        var previewImagePart = package.GetPart(previewUri);
        using (var previewImageStream = previewImagePart.GetStream(FileMode.Open, FileAccess.Read))
        using (var ms = new MemoryStream())
        {
            previewImageStream.CopyTo(ms);
            return ms.ToArray();
        }
    }
要将png转换为字节数组,可以执行以下操作


这样做的好处是,您可以在以后使用定义的关系Id(“预览”)访问opc容器中的预览图像

是的,我也可以用谷歌搜索。。。但这意味着什么?我应该用它做什么?@Andreas Zita-在处理打开的Office XML文件时,用来指示文档部分中的关系。我仍然不明白。这仅仅是我能以任何方式解释的两种资源之间某种联系的逻辑表示吗?“它有时有用”->为什么有用?@Andreas Zita-是的,一种逻辑关系。例如,用于上下文表、索引、剪贴画对象分组。Office文档级加载项(二进制文件)可以与实际文档和自定义XML部分一起存储在包中。
using System.IO.Compression;
using System.IO.Packaging;

using (var package = Package.Open( your_Zip/OPC_File_Path, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
    // Add the Preview Image to the OPC container
    var imagePart = package.CreatePart( PackUriHelper.CreatePartUri(new Uri("preview.png", UriKind.Relative)), "image/png");
    package.CreateRelationship( imagePart.Uri, TargetMode.Internal, OpcConstants.RelationshipTypes.PREVIEWIMAGE, "preview");

    using(var imageStream = imagePart.GetStream( FileMode.Open, FileAccess.Write ))
    {
        imageStream.Write( your_preview_Image_Byte_array, 0, your_preview_Image_Byte_array.Length);
    }
}


   private byte[] GetPreviewImage(System.IO.Packaging.Package package)
   {
        if (!package.RelationshipExists("preview"))
        {
            return null;
        }

        var previewRel = package.GetRelationship("preview");
        var previewUri = PackUriHelper.CreatePartUri(previewRel.TargetUri);

        var previewImagePart = package.GetPart(previewUri);
        using (var previewImageStream = previewImagePart.GetStream(FileMode.Open, FileAccess.Read))
        using (var ms = new MemoryStream())
        {
            previewImageStream.CopyTo(ms);
            return ms.ToArray();
        }
    }