{"id":312,"date":"2007-10-14T15:36:32","date_gmt":"2007-10-14T14:36:32","guid":{"rendered":"http:\/\/minibrain.wordpress.com\/2007\/10\/14\/ermitteln-von-assembly-dependencies\/"},"modified":"2007-10-14T15:36:32","modified_gmt":"2007-10-14T14:36:32","slug":"ermitteln-von-assembly-dependencies","status":"publish","type":"post","link":"https:\/\/abramowitsch.de\/blog\/?p=312","title":{"rendered":"Ermitteln von Assembly-Dependencies &#8211; oder &#8222;Wie werde ich diese verd*** FileNotFound-Exception los?&#8220;"},"content":{"rendered":"<p>Ich \u00e4rgere mich momentan mit einem Projekt herum, welches ich nicht problemlos deployen kann. Ich verwende dazu Interop-Technologien aus C++\/CLI.<\/p>\n<p>Leider l\u00e4\u00dft sich das Programm nicht auf einem frisch installierten Zielrechner ausf\u00fchren. Irgendeine Abh\u00e4ngigkeit muss es noch geben, die bei Installer nicht ber\u00fccksichtigt wurde.<\/p>\n<p>Aus diesem Grund habe ich mich etwas mit Assembly-Abh\u00e4ngigkeiten (bzw. Assembly-Dependencies) besch\u00e4ftigen m\u00fcssen. Dabei bin ich \u00fcber ein n\u00fctzliches Tool auf <a target=\"_blank\" href=\"http:\/\/www.codeproject.com\">CodeProject<\/a> gesto\u00dfen: <a target=\"_blank\" href=\"http:\/\/www.codeproject.com\/install\/Assemblydependencies.asp\">Assemlby Dependencies<\/a> von <a target=\"_blank\" href=\"http:\/\/weblogs.asp.net\/ngur\/default.aspx\">Natty Gur<\/a>.<\/p>\n<p><a target=\"_blank\" href=\"http:\/\/www.codeproject.com\/install\/Assemblydependencies\/viewer.jpg\"><\/a><\/p>\n<p><!--more-->Eine weitere M\u00f6glichkeit, Abh\u00e4ngigkeiten der Assembly aufzul\u00f6sen, ist der <strong>Dependency Walker<\/strong>. Dieser ist normalerweise Bestandteil von Visual Studio. Doch man kann ihn in der aktuellen Version von der Dependency Walker-Webseite herunterladen: <a target=\"_blank\" href=\"http:\/\/www.dependencywalker.com\/\">http:\/\/www.dependencywalker.com\/<\/a><\/p>\n<p><a target=\"_blank\" href=\"http:\/\/www.dependencywalker.com\/snapshot.png\"><img loading=\"lazy\" decoding=\"async\" width=\"564\" src=\"http:\/\/www.dependencywalker.com\/snapshot.png\" alt=\"Dependency Walker Screenshot\" height=\"429\" \/><\/a><\/p>\n<p>Der Dependency Walker kommt eigentlich aus der unmanaged (C++-) Welt. Mit ihm kann man sich die DLLs anzeigen lassen, die mit der Applikation zusammen h\u00e4ngen. Das Aufl\u00f6sungsverfahren ist dabei mehrstufig und es wird farblich hervorgehoben, welche DLLs fehlen. Es werden dabei alle Win32-Module in einer baumartigen Struktur dargestellt. Die neueren Version vom Dependency Walker k\u00f6nnen auch mit .NET Assemblies umgehen (siehe <a target=\"_blank\" href=\"http:\/\/www.dependencywalker.com\/faq.html\">FAQ<\/a>).<\/p>\n<p><img decoding=\"async\" align=\"left\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2007\/10\/reflector.png\" alt=\"reflector.png\" \/>Dann gibt es noch die M\u00f6glichkeit, den <strong>Reflector von Lutz Roeder<\/strong> einzusetzen. Diesen kann man kostenlos auf der Webseite <a href=\"http:\/\/www.aisto.com\/roeder\/dotnet\/\">http:\/\/www.aisto.com\/roeder\/dotnet\/<\/a> herunterladen. Es gibt auch eine gro\u00dfe Menge an <a target=\"_blank\" href=\"http:\/\/www.codeplex.com\/reflectoraddins\">AddIns <\/a>f\u00fcr dieses Tool.<\/p>\n<p>Und last but not least gibts noch den Assembly Binding Log Viewer, den ich ja bereits in einem anderen Posting vorgestellt habe.<\/p>\n<p>In zahlreichen Blogs habe ich einen Tipp gelesen, der darin besteht, den Registry-Schl\u00fcssel <span><em>HKLMSoftwareMicrosoftFusionForceLog auf &#8222;1&#8220; (DWORD) zu setzen.<\/em><\/span><\/p>\n<p>Auf CodeProject habe ich vor Kurzem noch einen netten Artikel gefunden, der die Vorgehensweise beim Laden und Binden von Assemblies beschreibt: <a target=\"_blank\" href=\"http:\/\/www.codeproject.com\/install\/assemblydeployment.asp\">http:\/\/www.codeproject.com\/install\/assemblydeployment.asp<\/a><\/p>\n<p>Wirklich sehr lesenswert!<\/p>\n<p><strong>[Update vom 03.02.2008]<\/strong><\/p>\n<p>Das Problem, warum sich meine Applikation nicht auf dem Zielrechner deployen lies, war die fehlende Installation von <a target=\"_blank\" href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?displaylang=de&amp;FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647\">Microsoft Visual C++ SP1\u00a0Redistributables<\/a>. Es hat leider wirklich sehr sehr lange gedauert, bis ich dem Problem auf die Schliche gekommen bin :-(, denn auf meiner Entwickler-Maschine ist ja ALLES installiert.<\/p>\n<p>Download der Redistributables: <a href=\"http:\/\/www.microsoft.com\/downloads\/details.aspx?displaylang=de&amp;FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647\">http:\/\/www.microsoft.com\/downloads\/details.aspx?displaylang=de&amp;FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich \u00e4rgere mich momentan mit einem Projekt herum, welches ich nicht problemlos deployen kann. Ich verwende dazu Interop-Technologien aus C++\/CLI. Leider l\u00e4\u00dft sich das Programm nicht auf einem frisch installierten Zielrechner ausf\u00fchren. Irgendeine Abh\u00e4ngigkeit muss es noch geben, die bei Installer nicht ber\u00fccksichtigt wurde. Aus diesem Grund habe ich mich etwas mit Assembly-Abh\u00e4ngigkeiten (bzw. Assembly-Dependencies) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3,20],"tags":[26],"class_list":["post-312","post","type-post","status-publish","format-standard","hentry","category-net","category-visual-studio-net","tag-net-debug"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Ug90-52","_links":{"self":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=312"}],"version-history":[{"count":0,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/312\/revisions"}],"wp:attachment":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}