Alea Gpu 运行时错误,未在 Rhino/GrassHopper 项目中找到文件或依赖项
Alea Gpu runtime error not finding a file or dependecy in a Rhino/GrassHopper project
我的 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.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)[=13=].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.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)[=13=].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.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)[=17=].9.76.0\Components\
”。我已经告诉 GrassHopper 在这两个目录中搜索,甚至尝试将 Alea dll 的副本放入这个(最后一个)文件夹中,但没有成功。
Q: 那么像Alea这样的包库是如何根据我可以控制的文件和路径(上面的se)来控制它在运行时使用的路径的?
阅读标记为 aleagpu
的帖子对我没有帮助,alea 文档页面上的故障排除信息也不多(可能是因为我是 .Net 和 VS 的新手)
提前致谢。
//罗尔夫
看来这是 Grasshopper 中的一个老问题了。
无论如何,我可能有一个解决方案,至少对我有用。
总结,解决问题:
复制Alea.dll文件到这个目录
C:\Program Files\Rhinoceros 5 (64-bit)\System\
在 Rhino 中输入命令
GrasshopperDeveloperSettings
并取消选中该选项:
Memory load *.GHA assemblies using COFF byte arrays
即使不以管理员身份启动 Rhino 并选中 COFF 框,它也可能会工作,但我还没有尝试过。
我的 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.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)[=13=].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.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)[=13=].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.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)[=17=].9.76.0\Components\
”。我已经告诉 GrassHopper 在这两个目录中搜索,甚至尝试将 Alea dll 的副本放入这个(最后一个)文件夹中,但没有成功。
Q: 那么像Alea这样的包库是如何根据我可以控制的文件和路径(上面的se)来控制它在运行时使用的路径的?
阅读标记为 aleagpu
的帖子对我没有帮助,alea 文档页面上的故障排除信息也不多(可能是因为我是 .Net 和 VS 的新手)
提前致谢。
//罗尔夫
看来这是 Grasshopper 中的一个老问题了。
无论如何,我可能有一个解决方案,至少对我有用。
总结,解决问题:
复制Alea.dll文件到这个目录
C:\Program Files\Rhinoceros 5 (64-bit)\System\
在 Rhino 中输入命令
GrasshopperDeveloperSettings
并取消选中该选项:Memory load *.GHA assemblies using COFF byte arrays
即使不以管理员身份启动 Rhino 并选中 COFF 框,它也可能会工作,但我还没有尝试过。