Ich entwickle eine Anwendung, die DirectX für das Grafik-Rendering verwendet. Ich muss darauf hinweisen, dass ich weder XNA noch SlimDX verwende, obwohl ich das wahrscheinlich tun sollte. Allerdings wusste ich das zu Beginn des Projekts nicht, und jetzt ist es zu spät, da die Umstellung auf eines dieser Systeme sehr viel Zeit in Anspruch nehmen würde.
Allerdings muss ich die Anwendung für die Benutzer bereitstellen. In meinem Projekt habe ich die folgenden Baugruppen referenziert:
- Microsoft.DirectX
- Microsoft.DirectX.Direct3D
- Microsoft.DirectX.Direct3DX
Ich brauche nur diese Baugruppen, sonst nichts. Die Benutzer müssen DirectX als Voraussetzung auf ihren Computern installiert haben. Daher fand ich die Aufnahme dieser DirectX-DLLs in meinen Anwendungsordner oder in die GAC unnötig.
Ich habe Probleme mit einigen Umgebungen, während andere perfekt funktionieren. Ich habe das Problem darauf zurückgeführt, ob DirectX-Assemblies in %windir% registriert sind \assembly. Wenn hier DirectX-Assemblies aufgeführt sind, wird die Anwendung ausgeführt. Ist dies nicht der Fall, schlägt der Start fehl.
Das Problem ist, dass, obwohl DirectX auf allen Computern installiert ist (dxdiag funktioniert, DirectX-Dateien werden darin aufgelistet), auf einigen von ihnen diese Baugruppen nicht aufgeführt sind. Wenn dies geschieht, schlägt die Anwendung mit der Ausnahme System.IO.FileNotFound fehl:
Die Datei oder Assembly 'Microsoft.DirectX.Direct3D, Version=1.0.2902.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Das System kann die angegebene Datei nicht finden.
Wenn zum Beispiel das neueste eigenständige Installationsprogramm von der Microsoft-Website heruntergeladen und installiert wird, werden die Baugruppen registriert. Ich bin mir nicht sicher, wie es sich verhält, wenn sie nicht installiert werden, aber das kommt vor. Oft.
Meine Fragen:
- Warum registriert DirectX diese Assemblies manchmal und manchmal nicht?
- Wie referenziert man DirectX-Assemblies am besten aus der Anwendung zu verweisen?