{"id":814,"date":"2011-04-09T20:53:12","date_gmt":"2011-04-09T18:53:12","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=814"},"modified":"2011-04-08T08:41:04","modified_gmt":"2011-04-08T06:41:04","slug":"bug-vs-2010-erkennt-nicht-die-anderung-an-einer-manifest-datei-in-einem-c-projekt","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2011\/04\/09\/bug-vs-2010-erkennt-nicht-die-anderung-an-einer-manifest-datei-in-einem-c-projekt\/","title":{"rendered":"BUG: VS-2010 erkennt nicht die \u00c4nderung an einer Manifest Datei in einem C++ Projekt"},"content":{"rendered":"<p>Ich habe einige Manifest Dateien in meinen Projekten. Viele steuern <em>COM<\/em> Module und machen diese <a href=\"http:\/\/msdn.microsoft.com\/en-us\/magazine\/cc188708.aspx\">registration-free<\/a>. Das ist einfach und effektiv. Dazu habe ich einfach eine entsprechende Manifestdatei angelegt mit den entsprechenden Eintr\u00e4gen und diese in das Projekt eingef\u00fcgt. Soweit alles gut.<\/p>\n<p>Jetzt stellte sich aber heraus, dass <em>VS-2010<\/em> (auch SP1), eine \u00c4nderung der Manifest Datei nicht bemerkt und die <em>EXE\/DLL<\/em> weder neu linkt, noch das Manifest-Tool anwirft, um das ge\u00e4nderte Manifest in das Executable einzutragen.<\/p>\n<p>Dabei spielt es keinerlei Rolle, ob die Datei nur einfach in das Projekt eingef\u00fcgt wurde, oder ob die Datei zus\u00e4tzlich in den Projekteinstellungen f\u00fcr das <em>Manifest Tool<\/em> bei <em>Additional Manifest Files<\/em> eingetragen wird.<\/p>\n<p>Das ist ein l\u00e4stiger Fehler, der in <em>VS-2005<\/em> und <em>VS-2008<\/em> nicht vorhanden war.<br \/>\nEr hat mich mindestens 4 Stunden Arbeit gekostet, weil ich bestimmte Abh\u00e4ngigkeiten testen und Fehler beheben wollte aber die neuen Dateien in dem Projekt immer wieder <em>SxS<\/em> Fehler lieferten. Es dauerte eine ganze Weile bis ich merkte, dass meine \u00c4nderungen an den Manifest Dateien \u00fcberhaupt nicht in meine Executables \u00fcbernommen wurden und ich immer wieder nur alte Manifeste in den <em>EXEs<\/em> und <em>DLLs<\/em> hatte.<br \/>\nUnd dann das Ganze an einem Montagmorgen und nach der Zeitumstellung&#8230; \ud83d\ude09<\/p>\n<p>Auf Connect habe ich einen entsprechenden Bug ver\u00f6ffentlich und mir wurde ein Fix empfohlen, der bei mir das Problem behebt.<br \/>\n<a href=\"http:\/\/connect.microsoft.com\/VisualStudio\/feedback\/details\/654293\/changes-to-a-manifest-file-in-a-c-project-does-not-trigger-a-rebuild-of-the-exe-or-dll\">Changes to a Manifest file in a C++ project does not trigger a rebuild of the EXE or DLL<\/a><\/p>\n<p>In der Datei <strong>%Programfiles%\\msbuild\\microsoft.cpp\\v4.0\\Microsoft.cppcommon.targets<\/strong> wird die folgenden Kommentarzeile gesucht:<\/p>\n<pre lang=\"xml\">&lt;!-- If RC did produce an output, then force link to embed that manifest.\r\n     This enforcement is required for projects residing on FAT32 drives. --&gt;<\/pre>\n<p>Darunter wird der folgende Textblock eingef\u00fcgt:<\/p>\n<pre lang=\"xml\">&lt;PropertyGroup&gt;\r\n    &lt;LinkSkippedExecution Condition=\"@(RCSourcesCompiled)!=''\"&gt;\r\n        false\r\n    &lt;\/LinkSkippedExecution&gt;\r\n&lt;\/PropertyGroup&gt;<\/pre>\n<p>Danch wird eine \u00c4nderung im Manifest korrekt erkannt und der Linker f\u00fcr die ge\u00e4nderte Ressouce angeworfen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe einige Manifest Dateien in meinen Projekten. Viele steuern COM Module und machen diese registration-free. Das ist einfach und effektiv. Dazu habe ich einfach eine entsprechende Manifestdatei angelegt mit den entsprechenden Eintr\u00e4gen und diese in das Projekt eingef\u00fcgt. Soweit alles gut. Jetzt stellte sich aber heraus, dass VS-2010 (auch SP1), eine \u00c4nderung der Manifest &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2011\/04\/09\/bug-vs-2010-erkennt-nicht-die-anderung-an-einer-manifest-datei-in-einem-c-projekt\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eBUG: VS-2010 erkennt nicht die \u00c4nderung an einer Manifest Datei in einem C++ Projekt\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30,3,172],"tags":[99,370,69,171],"class_list":["post-814","post","type-post","status-publish","format-standard","hentry","category-c","category-programmieren","category-vs2010","tag-bug","tag-c","tag-manifest","tag-vs-2010"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=814"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/814\/revisions"}],"predecessor-version":[{"id":816,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/814\/revisions\/816"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=814"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}