从类库中访问文件

Posted

技术标签:

【中文标题】从类库中访问文件【英文标题】:Access files from inside class library 【发布时间】:2022-01-18 19:14:22 【问题描述】:

背景信息: 我需要将 PDF 文件转换为图像并完全控制如何完成,并注意到此功能确实存在于 NuGet 包中,但仅存在于付费包中。因为我是一个便宜的混蛋,所以我拒绝为此付费,因为我可以轻松地在 python 中免费做到这一点。

我创建了一种从 c# 调用 python 脚本的方法,它以我想要的确切方式将我想要的 PDF 转换为 jpg,并使用了一段时间。现在我想在这个项目的基础上进行构建,并考虑将其创建为一个可以在多个项目中使用的类库。

我现在面临的问题是,要让这个 python 脚本工作,我需要一个特定的资源,一个文件夹中的几个文件。当我将现有项目(pdf 到 img 转换器)添加到另一个项目时,它只会添加 DLL,而忽略其他所有内容。我需要的文件还在类库中的一个文件夹中。

当我尝试访问必要的文件时,当前路径在新项目中,而这些文件不存在。

Directory.GetCurrentDirectory(); 告诉我当前路径在新项目中。

Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 告诉我 DLL 的位置,但我需要的文件不存在。

我曾尝试寻找访问类库中文件的方法,但没有找到任何有用的东西。

问题: 有没有办法访问您正在引用的项目中的文件?或者有没有办法确保我需要的文件也被带来,而不仅仅是 DLL?

为了完成,我打算把它做成我自己的私有 Nuget 包,我确信我可以在 .nupkg 中获得我需要的文件,但同样的问题仍然存在,我如何访问这些文件。

如果有人对此类问题有任何经验,我很高兴收到您的来信。提前谢谢你。

【问题讨论】:

如果文件在项目中,请转到其属性并选择“复制到输出目录:始终复制”或“如果较新则复制”。 您的选择是 1) 配置您的项目,以便将类库和使用它的应用程序构建到同一个文件夹中:然后您的所有文件都在那里。 2) 从应用程序中引用这些文件。 3)将文件作为“嵌入式资源”(在属性下)添加到类库中。这会将它们嵌入到 DLL 中。使用例如访问它们typeof(SomeTypeInTheClassLibrary).Assembly.GetManifestResourceStream(...),它给你一个包含文件内容的Stream 【参考方案1】:

在这种情况下,我会尝试使用 c# 解决方案将 pdf 转换为 jpeg。 可能是这样的: Convert pdf to jpeg using a free c# solution

或最佳解决方案:一个 nuget 包,您可以在 nuget 包中将其定义为依赖项

但还有许多其他解决方案,而不是 phyton 脚本。

原因:

    如果你想提供一个 nuget 包(即使是它的公司实习生)库 不应该有不透明的依赖。 在您的情况下,依赖于环境中可用的 phyton 安装,将使用该包。

    使用该包的软件必须具有执行phyton脚本的权限

    此外,如果您使用 c# 解决方案,您将解决必须能够存储和执行脚本的问题

【讨论】:

感谢您的贡献,但这不是我想要的。我已经尝试了上面的解决方案,但这不是我需要的。我在问一个具体问题,你在回答另一个问题。

以上是关于从类库中访问文件的主要内容,如果未能解决你的问题,请参考以下文章

从类库访问用户上下文

C# 从类库中获取资源图片,把图片资源保存到类库中

asp.net MVC - 我可以从类库中引用视图吗?

从类库访问 Asp.net-core 中的 appsetting.json

如何使用 ServerManager 从类库中读取 IIS 站点,而不是 IIS express,或者提升的进程如何处理类库?

从monodroid类库中访问资产