【问题标题】:Alea Gpu runtime error not finding a file or dependecy in a Rhino/GrassHopper projectAlea Gpu 运行时错误在 Rhino/GrassHopper 项目中找不到文件或依赖项
【发布时间】:2017-07-17 17:09:30
【问题描述】:

我的 Alea Gpu 存在 runtime 问题,无法找到所有相关文件(我猜是 dll)。作为 .NET 的新手,当它不能开箱即用时,我很难找出正确的路径,所以如果有人可以根据我在下面提供的路径给我一些提示,那将是黄金。

背景

我使用 Nuget 为 VS2017 安装了 Alea Gpu 包,我的项目代码编译并为 Rhino3d 创建了所需的 GrassHopper 组件。该组件在 RT 中也能正常显示,但在输入包含 Alea Gpu 调用的“求解器”方法时失败并显示以下错误消息。

错误信息

错误信息(我的瑞典语翻译):

1. Solution exception:Cannot find the File or the Assembly Alea, Version=3.0.0.0, Culture=neutral, PublicKeyToken=ba52afc3c2e933d6 or one of its dependencies. Cannot find the file.

也许不是最相关的,但这是带有错误消息的失败组件(瑞典语):

调用 .dll (.gha)

运行这个所谓的“GrassHopper 定义”(本质上是 .dll 的 .gha 文件)的代码位于 VS 项目中的以下文件夹结构中,其中还显示了 Alea 包结构。

调用 GrassHopper (.gha) 文件:

C:\Workbench\VS\RILGH_Development\RILGH_CSUtils\RILGH_CSUtils\bin\x64\Debug\RILGH_CSUtils.gha

Alea.targets

文件“...\packages\Alea.3.0.3\Alea.targets”的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AleaPackageDir Condition="$(AleaPackageDir) == '' Or $(AleaPackageDir) == '*Undefined*'">$(MSBuildThisFileDirectory)..\</AleaPackageDir>
    <AleaResourceDir Condition="$(AleaResourceDir) == '' Or $(AleaResourceDir) == '*Undefined*'">$(OutputPath)</AleaResourceDir>
    <AleaDoExtractCTResources Condition="$(AleaDoExtractCTResources) == '' Or $(AleaDoExtractCTResources) == '*Undefined*'">true</AleaDoExtractCTResources>
  </PropertyGroup>
  <UsingTask
    TaskName="Alea.Build.ExtractCTResourcesTask"
    AssemblyFile="$(AleaPackageDir)tools\Alea.Build.dll"/>
  <Target AfterTargets="AfterBuild" Name="AleaExtractCTResources" Condition="$(AleaDoExtractCTResources) == 'true' Or $(AleaDoExtractCTResources) == 'True'">
    <Alea.Build.ExtractCTResourcesTask
      ResourceAssemblyDir="$(AleaPackageDir)tools\"
      ResourceDir="$(AleaResourceDir)" />
  </Target>
  <Target AfterTargets="AfterClean" Name="AleaCUDACleanCTResources">
    <RemoveDir Directories="$(AleaResourceDir)\Alea.CUDA.CT.LibDevice"/>
    <RemoveDir Directories="$(AleaResourceDir)\Alea.CUDA.CT.Native.ARM.B32.Linux"/>
    <RemoveDir Directories="$(AleaResourceDir)\Alea.CUDA.CT.Native.X86.B32.MacOSX"/>
    <RemoveDir Directories="$(AleaResourceDir)\Alea.CUDA.CT.Native.X86.B32.Windows"/>
    <RemoveDir Directories="$(AleaResourceDir)\Alea.CUDA.CT.Native.X86.B64.Linux"/>
    <RemoveDir Directories="$(AleaResourceDir)\Alea.CUDA.CT.Native.X86.B64.MacOSX"/>
    <RemoveDir Directories="$(AleaResourceDir)\Alea.CUDA.CT.Native.X86.B64.Windows"/>
  </Target>
</Project>

.csproj 设置

<ItemGroup>
    <Reference Include="Alea, Version=3.0.0.0, Culture=neutral, PublicKeyToken=ba52afc3c2e933d6, processorArchitecture=MSIL">
      <HintPath>..\packages\Alea.3.0.3\lib\net45\Alea.dll</HintPath>
    </Reference>
    <Reference Include="Alea.IL, Version=3.0.0.0, Culture=neutral, PublicKeyToken=ba52afc3c2e933d6, processorArchitecture=MSIL">
      <HintPath>..\packages\Alea.3.0.3\lib\net45\Alea.IL.dll</HintPath>
    </Reference>
    <Reference Include="Alea.Parallel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=ba52afc3c2e933d6, processorArchitecture=MSIL">
      <HintPath>..\packages\Alea.3.0.3\lib\net45\Alea.Parallel.dll</HintPath>
    </Reference>
    <Reference Include="nunit.framework, Version=3.7.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
      <HintPath>..\packages\NUnit.3.7.1\lib\net45\nunit.framework.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="RhinoCommon">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files\Rhinoceros 5 (64-bit)\System\RhinoCommon.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Grasshopper">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files\Common Files\McNeel\Rhinoceros\5.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)\0.9.76.0\Grasshopper.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="GH_IO">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files\Common Files\McNeel\Rhinoceros\5.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)\0.9.76.0\GH_IO.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>

... .csproj 中的最后一行:

  <Import Project="..\packages\Alea.3.0.3\build\Alea.targets" Condition="Exists('..\packages\Alea.3.0.3\build\Alea.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Alea.3.0.3\build\Alea.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Alea.3.0.3\build\Alea.targets'))" />
    <Error Condition="!Exists('..\packages\Fody.1.29.4\build\dotnet\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.1.29.4\build\dotnet\Fody.targets'))" />
  </Target>
  <Import Project="..\packages\Fody.1.29.4\build\dotnet\Fody.targets" Condition="Exists('..\packages\Fody.1.29.4\build\dotnet\Fody.targets')" />

希望这是关于路径和在哪里进行任何修改的足够信息,以便可以找到运行时文件,给定单个调用 GrassHopper 文件的路径 ("C:\Workbench\VS\RILGH_Development\RILGH_CSUtils\RILGH_CSUtils\bin\x64\Debug\RILGH_CSUtils.gha") 和 GrassHopper 执行平台的一般路径搜索相关组件 dll(Alea 似乎不太关心的路径)“C:\Program Files\Common Files\McNeel\Rhinoceros\5.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)\0.9.76.0\Components\”。我已经告诉 GrassHopper 在这两个目录中进行搜索,甚至尝试将 Alea dll 的副本放到这个(最后一个)文件夹中,但没有成功。

:那么像 Alea 这样的包库如何根据我可以控制的文件和路径(见上文)实际控制它在运行时使用的路径?

阅读标记为 aleagpu 的帖子对我没有帮助,也没有 alea 文档页面上稀疏的故障排除信息(可能是由于是 .Net 和 VS 的新手)

提前致谢。

// 罗尔夫

【问题讨论】:

  • 您好 Rolf,我很好奇您通过 Grasshopper 进行的 GPU 计算。
  • 嗨@Goswin,目前的意图是对来自医学 CT 扫描的网格进行计算(用于研究和术前计划)。图片中显示的组件是一个非常简单的组件,仅用于测试 Alea 库。它计算网格中点云的“质心”,该网格可以在 GrassHopper 画布的最左侧看到。 // 罗尔夫
  • 您也可以尝试联系twitter.com/EgloffDaniel。我在一次 F# 会议上遇到过他,他对 AleaGPU 在 CAD 系统中的潜在用途很感兴趣。

标签: c# dll grasshopper aleagpu rhino3d


【解决方案1】:

这似乎是 Grasshopper 中一个古老的未解决问题。

无论如何,我可能有一个解决方案,至少它对我有用。

从这个讨论: http://www.grasshopper3d.com/forum/topics/how-do-i-install-a-custom-ghx?id=2985220%3ATopic%3A168876&page=2#comments

总结一下,解决问题:

  1. 将 Alea.dll 文件复制到此目录 C:\Program Files\Rhinoceros 5 (64-bit)\System\

  2. 在 Rhino 中输入命令 GrasshopperDeveloperSettings 并取消选中该选项: Memory load *.GHA assemblies using COFF byte arrays

即使没有以管理员身份启动 Rhino 并选中 COFF 框,它也可能工作,但我还没有尝试过。

【讨论】:

  • 编辑:无需以管理员身份启动 Rhino 即可工作
  • 这像 3 个月前一样救了我,我正在构建一个依赖外部 dll 的插件,并收到类似于此的错误消息。只需将您依赖的 dll 放在 Rhino 版本中,就可以了,这一定与 Rhino 所做的沙盒有关。总之谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多