2017-07-17 3 views
1

Ich habe ein Laufzeit Problem mit Alea Gpu, die nicht alle zugehörigen Dateien nicht finden (DLL glaube ich). Da ich neu in .NET bin, habe ich ein Problem damit, die richtigen Pfade zu finden, wenn es nicht sofort einsatzbereit ist. Wenn mir also jemand anhand der unten angegebenen Pfade Hinweise geben kann, wäre es Gold.Alea Gpu Laufzeitfehler nicht auf eine Datei oder dependecy in einem Rhino/Grasshopper Projekt zu finden

Hintergrund

ich die Alea Gpu Pakete für VS2017 installiert Nuget verwenden, und mein Projekt Code kompiliert und die gewünschte Komponente für Grasshopper Rhino3D. Diese Komponente wird auch in RT ordnungsgemäß angezeigt, schlägt jedoch mit der folgenden Fehlermeldung fehl, wenn die Methode "solver" mit Alea Gpu-Aufrufen eingegeben wird.

Fehlermeldung

Die Fehlermeldung (meine Übersetzung aus dem Schwedischen):

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.

Vielleicht nicht die relevanteste, aber hier ist die fehlerhafte Komponente mit der Fehlermeldung (auf Schwedisch) :

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

Der Aufruf DLL (.gha)

Der Code, der diese so genannte „Definition Grasshopper“ läuft (a .gha Datei, die im Wesentlichen eine DLL ist) wird in der folgenden Ordnerstruktur in einem VS Projekt, bei dem auch die Struktur dargestellt Alea Pakets befindet.

Der Aufruf Grasshopper (.gha) file:

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

VS Project folder structure

Alea.targets

Der Inhalt der Datei“... \ packages \ Alea.3.0.3 \ Alea.targets sich wie folgt:

<?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 Einstellungen

<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> 

... letzten Zeilen in 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')" /> 

Hoffentlich ist genug Informationen über Pfade und wo irgendwelche Änderungen vorzunehmen, so dass die Laufzeitdateien, den Pfad zu den einzelnen erbracht werden können Grasshopper-Datei („C:\Workbench\VS\RILGH_Development\RILGH_CSUtils\RILGH_CSUtils\bin\x64\Debug\RILGH_CSUtils.gha‚) und die allgemeinen Pfade, wo der Grashüpfer Ausführungsplattform sucht nach dem entsprechenden Komponente dLL Aufruf (ein Weg, den Alea scheinbar nicht viel über schert),‘C:\Program Files\Common Files\McNeel\Rhinoceros\5.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)\0.9.76.0\Components\“. Ich habe GrassHopper gesagt, in diesen beiden Verzeichnissen zu suchen, und sogar versucht, Kopien der Alea-DLLs in diesem (dem letzten) Ordner zu löschen, aber nicht gehen.

Q: Wie kontrolliert die Paketbibliothek wie Alea tatsächlich die Pfade, die sie in der Laufzeit verwendet, basierend auf den Dateien und dem Pfad (siehe oben), den ich kontrollieren kann?

durch die Beiträge lesen getaggt aleagpu mir nicht geholfen war, noch die spärlichen Informationen zur Fehlerbehebung auf den alea Dokumentationsseiten (möglicherweise aufgrund Neuling ist mit .Net und VS)

Vielen Dank im Voraus.

// Rolf

+0

Hallo Rolf, ich bin gespannt, welche GPU-Berechnungen du über Heuschrecke machst. – Goswin

+1

Hi @Goswin, Die aktuelle Absicht ist es, Berechnungen auf Gittern aus medizinischen CT-Scans durchzuführen (für Forschung und Pre-Op-Planung). Die in der Abbildung gezeigte Komponente ist eine tote einfache Komponente nur zum Testen der Alea-Bibliothek. Er berechnet den "Schwerpunkt" einer Punktwolke aus dem Netz, das ganz links hinter der GrassHopper-Leinwand zu sehen ist. // Rolf – RIL

+1

könntest du auch versuchen, https://twitter.com/EgloffDaniel zu kontaktieren. Ich traf ihn einmal bei einem F # Meeting und er war an einem möglichen Einsatz von AleaGPU in CAD-Systemen interessiert. – Goswin

Antwort

2

Es scheint, dass dies ein altes ungelöstes Problem in Grashüpfer ist.

Wie auch immer, ich habe wahrscheinlich eine Lösung dafür, zumindest funktionierte es für mich.

Aus dieser Diskussion: http://www.grasshopper3d.com/forum/topics/how-do-i-install-a-custom-ghx?id=2985220%3ATopic%3A168876&page=2#comments

Um es zusammenzufassen, um das Problem zu lösen:

  1. Kopieren Sie die Datei Alea.dll C:\Program Files\Rhinoceros 5 (64-bit)\System\

  2. In Rhino Typ der Befehl an diesesverzeichnis GrasshopperDeveloperSettings und deaktivieren Sie die Option: Memory load *.GHA assemblies using COFF byte arrays

Es könnte wahrscheinlich sogar arbeiten, ohne Rhino als Admin zu starten und mit der COFF-Box kontrolliert, aber ich habe noch nicht versucht.

+0

bearbeiten: Es funktioniert, ohne Rhino als Administrator zu starten –

Verwandte Themen