问题描述
我做的很好,想为nuget.org做贡献
我有一个使用.NET无法解决的任务(将.pdf
转换为.html
,但这不是要点,它可以是其他任何东西),但是很容易处理使用Python。因此,我编写了一个.py
脚本,将其转换为单文件可执行文件,在.NET中编写了一些包装,然后就可以正常工作了。
包装程序基本上只是将可执行文件卸载到硬盘驱动器上的某个位置,通过命令行参数调用它并获取响应。
- 现在如何发布带有可执行文件的nuget?
- 这甚至允许吗?
- 这个主意太糟糕了,我把整个东西都扔掉了吗?
- 我是否以某种方式明确警告用户该库包含可执行文件,该可执行文件将被复制到他们的硬盘驱动器?
- 是否提供指向.py脚本代码的链接(在哪里?)?
- 然后通过某种方式验证(如何?)此代码实际上是可执行文件中的内容?
解决方法
现在如何发布带有可执行文件的nuget?
这是常见的做法。 NuGet软件包允许使用各种工件,例如源文件,图像,XML文件,MSBuild的构建脚本,工具可执行文件,PowerShell脚本以及任何类型的二进制文件,包括库和可执行文件。
这甚至允许吗?
NuGet是程序包管理器。至于软件包本身,Microsoft的description对于什么是有用的代码或 content 是不是很清楚。
任何现代开发平台的必备工具是一种机制,开发人员可以通过该机制来创建,共享和使用有用的代码。通常,此类代码被捆绑到“程序包”中,这些程序包包含编译后的代码(作为DLL)以及使用这些程序包的项目中所需的其他内容。
许多主流的NuGet软件包都包含可执行文件,例如CefSharp.Common包含完整的Chromium浏览器,甚至Microsoft自己的CPPRestSDK包含可执行OpenSSL,Boost或Brotli的多个可执行文件以及PowerShell脚本复制文件等等。顺便说一下,这是在MSDN上构建本机NuGet软件包的主要示例。
这个主意太糟糕了,我把整个东西都扔掉了吗?
不。即使不打算从一开始就打包可执行文件,但它已经成为一种普遍的做法。使用NuGet的每个人都应该意识到他们正在使用库和其他可能有害的工件。您如何确定所消耗的DLL也是安全的?
我是否以某种方式明确警告用户该库包含可执行文件,该可执行文件将被复制到他们的硬盘驱动器?
如果您查看上面的软件包,除了是本机软件包之外,没有任何关于内容的通知。您必须检查包装或得到相应的项目现场才能找到答案。此外,包含不想要的工件的软件包可能会被其他一系列软件包依赖项所遮盖。
您可以做的当然是通过NuSpec文件中的description
标签提供有关包装的全面描述。此说明将显示在 nuget.org 以及大多数客户端中。
提供指向.py脚本代码的链接(在哪里?)?
您可以通过projectUrl
标记提供指向项目站点的链接,您可以在其中进行详细介绍并提供源。另一种选择是将其作为内容文件包含以供参考,但是有人看到它的机会很小,并且不能证明您的可执行文件是从该脚本生成的。
然后通过某种方式验证(如何?)该代码实际上是可执行文件中的内容?
所有这些都归结为一个问题,即您如何信任一个程序包? 您不能。
包可能带来安全风险,因为它们可能执行任意代码或将恶意代码携带到您的应用程序中。您可以自己作为使用者查看所有文件,也可以依赖您信任的来源或作者。一种提供信任的方式是通过signing packages来防止内容篡改确保包的完整性。同样,这不能验证可执行文件的构建方式。