问题标签 [system.io.packaging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
561 浏览

c# - 以编程方式生成没有 NuGet.Core 的 NuGet 包

我希望在不使用lib.nupkgNuGet.Corenuget.exe pack.

据我了解,本质上生成一个.nupkg包含单个文件的文件应该是创建开放包格式文件的以下“简单步骤”:

  1. 验证 nuspec(它将以编程方式生成,但很高兴知道这样一个库/处理阶段的输出是“干净的”)
  2. 在包中包含.nuspec文件(无需签名或操作)
  3. 在包中提到的位置包含链接的文件.nuspec

nuget pack如果有人可以填写命令行会执行的任何缺失步骤(是否需要签名等),我将不胜感激

验证我在上述步骤中没有遗漏任何内容是最有价值的,尽管代码也没有害处。


更多上下文:目前,下游消费者只是属于同一代码库的一部分的代码(也不使用NuGet.Core)。现在这并不重要,但随着时间的推移,可以想象 VS 和/或第三方工具可能需要能够对生成的包进行内省。

附加上下文

[通过@bricelam]:.nupkg文件是标准的文件 - 即遵循特定模式的 Zip 文件具有清单等。

[通过@maartenba ]:有一个Mono implSystem.IO.Packaging [这很好,因为解决方案需要跨平台工作]。

0 投票
0 回答
90 浏览

.net - PackagePart.GetStream() 的结果是否应该被处理?

PackagePart.GetStream的调用者是否应该处理返回的 Stream 对象?或者这个方法是否返回一个可以重用的对象?文档没有说。

查看 .NET 源代码,几乎每个调用GetStream()的地方都会直接或间接地处理结果。我对答案的最佳猜测是 GetStream() 的结果总是可以被处理,但如果父 PackagePart 被处理,则不一定必须如此。

0 投票
1 回答
361 浏览

c# - 从不可搜索的流中打开 System.IO.Packaging.Package

我正在尝试解压缩System.IO.Packaging.Package从 Web 服务器收到的内容。也就是说,我正在使用该System.IO.Packaging.Package.Open(Stream)方法并将其传递给System.Net.HttpWebResponse. 不幸的是,这引发了一个System.ArgumentException告诉我它

无法对不支持搜索的 [a] 流进行操作。

查看参考源,结果发现System.IO.Packaging.PackageSystem.IO.Packaging.ZipPackage用作其唯一的实现,而后者又使用内部ZipArchive类。果然,ValidateModeAccessStreamStreamingCombinations()如果stream.CanSeek来自falsemy HttpWebResponse.

然而,有一个神奇的streaming参数,显然,总是falsePackage.Open()方法一直传递到ValidateModeAccessStreamStreamingCombinations().

所以这是我的问题:有什么方法可以用来从不可搜索的流中动态Package.Open(Stream)构建一个?Package或者我是否必须在某处缓存流内容,例如在MemoryStream?(我真的不想这样做,因为一旦我解包它,我就对包流不感兴趣。)

0 投票
0 回答
189 浏览

system.io.packaging - [Content_Types].xml 文件中的 System.IO.Packaging 缺少覆盖

我面临这里讨论的问题 [Content_Types].xml <Override> element missing

建议的解决方案是

根据这个,如果我们添加一个额外的 xml 文件,即 File1.xml,那么 [Content_Types].xml 文件将具有 Override 元素。但是,该包还将包含应该避免的虚拟 File1.xml。有没有其他方法可以在 [Content_Types].xml 中添加 Override 元素而不添加任何其他 xml 文件。

谢谢你。

0 投票
1 回答
1068 浏览

c# - System.IO.Packaging 中的 FileShare.ReadWrite

我正在使用 System.IO.Packaging 来处理包文件。

但似乎 Package 无法打开具有提供 FileShare.ReadWrite 的读取权限的文件。这是代码:

当我尝试加载文件时,会引发以下异常:

抛出异常:WindowsBase.dll 中的“System.NotSupportedException”

附加信息:仅支持 FileShare.Read 和 FileShare.None。

有什么可以做的吗?我需要将 FileShare 设置为 ReadWrite。

编辑:我正在尝试在我的代码中使用 docx 文件。我只想能够在不修改文件的情况下读取文件的内容。同时,我还希望它可以使用 Word 进行编辑。这就是我想要达到的目标。为此,我成功地使用了 DotNetZip 的 Ionic.Zip 库。但是我在使用它保存文件时遇到了一些错误。所以我不得不回到 System.IO.Packaging。任何帮助,将不胜感激。

0 投票
1 回答
446 浏览

c# - 无法使用 System.IO.Packaging.Package 解压缩文件名中带有 Unicode 字符的 Zip 包?

文件包操作有一些麻烦。

以下是问题的简短描述:

如果一个包中包含一个包含 Unicode 字符的文件,它的压缩效果很好(可以在 windows 中打开包并解压缩它)但是如果尝试使用这个 Package.Open(.., FileMode.Open),它会导致错误“文件包含损坏的数据”。

问题:我做错了什么?想不通这个。请指教。

这是我使用的压缩和不妥协的内存中二进制数据的代码:

0 投票
0 回答
63 浏览

c# - 使用包类创建 zip 时是否可以不存储文件夹结构?

我正在使用 Package 类来创建一个 zip 文件。这工作得很好。我唯一不想在那里(存在)是:文件夹结构也被保存。尽管查看了类,但我发现那里没有参数,所以我担心这是不可能的,但也许我忽略了一些东西。

因此,我的问题是:有没有办法不将文件夹结构保存到 .zip 文件中?

示例c:\test\mytest\blahblup.txt 应该存储为 blahblup.txt而不是c:\test\mytest\blahblup.txt在 .zip 文件中。

使用的代码:

0 投票
0 回答
2360 浏览

c# - 必须为此操作打开商店 - System.IO.Packaging.Package

我正在使用 System.IO.Packaing.Package 类来压缩文件。在读取和保存文件的同时运行我的应用程序的多个实例是可能的。处理小文件时一切似乎都很好,但是当涉及大文件时,如果应用程序的两个实例同时保存,我会收到一条异常消息 Store must be open for this operation,堆栈跟踪如下所示。

根据我的理解,在处理文件<10mb的包时,数据存储在一些内存流中,但是当内部>10mb时,它将切换到IsolatedStorage。考虑到这一点,我发现即使这些是多个运行的实例,它们都解决了相同的隔离存储位置,我相信这就是问题所在。我能够找到一个黑客来强制每个实例解决使用以下代码到不同的位置:

尽管这使问题消失了,但我一点也不喜欢它。请帮助弄清楚如何优雅地解决这个问题。在进一步的研究中,我发现IsolatedStorage 甚至不打算与多线程一起使用,这让我想知道为什么在处理包时它是一个选项。

更新:

此外,可能会遇到问题,因为要访问 IsolatedStorage,您的代码必须拥有所有必要的本机平台操作系统权限,如果没有,则无法创建 IsolatedStorage 流。

更新 2

已发布针对 Windows 8.1 和 Windows Server 2012 R2 上的 .NET Framework 4.5、4.5.1 和 4.5.2的修补程序以解决此问题。Eric White 还编写了一个新的 System.IO.Packaging 实现以不使用独立存储,这实际上将添加到 COREFX。他的实现可在此处获得。

Microsoft 指出的与此相关的 System.IO.Packaging 可能发生的其他问题如下。

当您在单独的线程上使用大型包时,可能会发生死锁。System.IO.Packaging 对大于 10 兆字节 (MB) 的包使用 IsolatedStorage。当两个或多个线程使用大包时,即使包是独立的,也可能发生死锁。死锁涉及两个线程。一个在 IsolatedStorageFile.Lock 中等待,而另一个在 IsoloatedStorageFile 类的另一个方法中等待。此问题已通过向 System.IO.Packaging 添加同步来解决,以避免隔离存储文件中的问题。当您从在不同线程上打开的包中检索 PackageProperties 时,即使这些包是独立的,也可能会发生异常。由此产生的最常见的调用堆栈如下:

此问题是由共享内部资源的争用引起的,可以通过为每个包提供该资源的副本来解决。

0 投票
2 回答
3364 浏览

c# - C#获取网络摄像头名称列表

我已经搜索了几天无济于事。我试图简单地将图像设备名称(即使用 c# 的网络摄像头)列出到文本文件中。我知道我可以使用 System.IO.Ports 来获取我正在做的事情,但我找不到列出图像设备的简单方法。

我已经能够使用此代码找到 WIA 设备,但找不到非 WIA 设备:

0 投票
1 回答
68 浏览

c# - 有没有办法确定文件是否可以作为 System.IO.Packaging.Package 打开?

如果我有文件路径或流,是否可以使用静态方法来确定文件/流是否是包,而不是尝试Package.Open在文件/流上使用并捕获System.IO.FileFormatException