2017-07-17 72 views
1

我有Alea的GPU上运行问题不找到所有相关的文件(DLL的我猜的)。作为.NET的新手,我无法确定正确的路径,因为如果任何人都可以根据我在下面介绍的路径给出一些提示,那就是黄金。Alea的GPU运行时错误找不到文件或dependecy在犀牛/蝈​​蝈项目

背景

我安装使用的NuGet为VS2017的Alea的GPU封装,我的项目代码编译,并创建Rhino3d所需的蚂蚱组件。此组件在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.

也许不是最相关的,但在这里是与错误信息发生故障的部件(瑞典) :

http://misc.rilsource.org/w/images/misc.rilsource.org/Alea_Gpu_GH_Component_Debug_error_00.png

主叫的.dll(.gha)

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

主叫蚱蜢(.gha)文件:

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

VS Project folder structure

Alea.targets

文件... \包”的内容\ 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)提前

感谢。

//罗尔夫

+0

嗨,Rolf,我很好奇通过蚱蜢你正在做什么GPU计算。 – Goswin

+1

Hi @Goswin,目前的意图是对来自医学CT扫描的网格进行计算(用于研究和术前计划)。图片中显示的组件仅仅是用于测试Alea库的简单组件。它可以从GrassHopper画布背后的最左边的网格中计算点云的“质心”。 // Rolf – RIL

+1

你也可以尝试联系https://twitter.com/EgloffDaniel。我曾在F#会议上遇到过他,他对CAD系统中潜在的AleaGPU使用感兴趣。 – Goswin

回答

2

看来,这是草蜢的旧未解决的问题。

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

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

总之,要解决这个问题:

  1. 复制Alea.dll文件thisdirectory C:\Program Files\Rhinoceros 5 (64-bit)\System\

  2. 在犀牛类型命令 GrasshopperDeveloperSettings 并取消选中: Memory load *.GHA assemblies using COFF byte arrays

它可能甚至可能是工作,而无需启动犀牛作为管理员,并与COFF箱检查,但我还没有尝试过。

+0

编辑:它没有启动犀牛作为管理员工作 –