如何获取AppBundle中上传文件的路径?

How to get the path of the uploaded file within the AppBundle?

我们正在使用 Autodesk Forge 的设计自动化 API。我们已经准备好 AppBundle,我们将 .rfa 文件放入包含 .dll 文件的同一文件夹中。当 AppBundle 在 Forge 服务器上解压后,哪个路径可以指向我们的 .rfa 文件? (我们如何访问它?)我们的目标是将附加的 Family 文件的内容放入正在使用 API 上传的输入文件中,结果应该是一个新文件,其中包含来自该文件的添加内容我们在 AppBundle 中上传。该过程在本地使用 Revit 进行测试时有效,但不适用于 API。我们正在检索的报告中明明指出找不到附件:

Autodesk.Revit.Exceptions.FileNotFoundException: T:\Aces\Jobs\ced628d35ecf4412b68c024e2cec098b\something.rfa

在代码方面,我们尝试通过此路径访问 .rfa 文件:

static string currentDir = Environment.CurrentDirectory;
static string path_input =  currentDir+@"\something.rfa";

这似乎是一条合乎逻辑的道路,但事实证明,这不是.. 有没有办法访问上传的 AppBundle 中的 .rfa 文件? 我看了一下 Restrictions 但没有提到从 AppBundle 读取文件是受限或不可访问的。我错过了什么吗?

.NET 程序集知道自己的路径。可以在里面调用System.Reflection.Assembly.GetExecutingAssembly().Location找到dll的当前路径。然后您可以计算 .rfa 文件相对于 dll 文件夹的路径并使用它/打开它。因此,您应该能够在 appbundle.

中打开与插件一起打包的任何文件

您只需将代码修改为:

static string assemblyLocation = Assembly.GetExecutingAssembly().Location;
static string assemblyDirectory = Path.GetDirectoryName(assemblyLocation);
static string path_input = assemblyDirectory+@"\something.rfa";

但是需要注意的一件事是,您对 appbundle 中的文件只有只读权限。如果您的代码依赖于在执行期间修改这些文件,那么您可以简单地将源 rfa 文件复制到当前工作文件夹,然后使用复制的文件。

另请参阅 blog 中的更多详细信息以了解类似的想法。

我们有一篇博客 post 介绍如何在 commandLine 参数中传入 app bundle 路径或通过位置查找路径add-in dll 的: https://forge.autodesk.com/blog/store-template-documents-appbundle