2012-12-14 4 views
7

Ich verwende derzeit die Microsoft BCL Async-Bibliothek (here) über ein Projekt mit einer großen Anzahl voneinander abhängiger Assemblys, die alle gegen .NET 4 Full Profile kompiliert wurden. Ich musste die Assembly-Bindungsumleitung in jedem Projekt verwenden, um es kompilieren zu lassen (gemäß Ausgabe 2 here).Wie wird die Datei app.config mit einer C++/CLI verwendet, um die Baugruppenbindung in VS 2012 zu konfigurieren?

Das Problem, das ich jetzt habe, ist, dass ich verbrauchen eine diese Bibliotheken aus einem C++/CLR-DLL-Projekt, ist es nicht wirklich async verwenden müssen, aber ich habe die folgenden Kompilierungsfehler:

2> C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1578,5): Warnung MSB3268: Die primäre Referenz "ImInterface.dll" konnte nicht aufgelöst werden, da sie indirekt von der Framework-Assembly "System" abhängig ist .Runtime, Version = 1.5.11.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ", die im aktuellen Zielsystem nicht aufgelöst werden konnten. ".NETFramework, Version = v4.0". Um dieses Problem zu beheben, entfernen Sie entweder den Verweis "ImInterface.dll" oder richten Sie Ihre Anwendung auf eine Framework-Version um, die "System.Runtime, Version = 1.5.11.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" enthält.

Ich habe die gleiche app.config-Datei hinzugefügt, die ich in allen C# -Projekten verwendet habe, aber es scheint keinen Effekt im C++ - Projekt zu haben. Muss ich es in einem bestimmten Verzeichnis speichern oder andere Schritte ausführen, damit die app.config-Datei erkannt wird?

Der Inhalt meiner app.config-Datei ist:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Irgendwelche Vorschläge geschätzt werden!

Grüße, Anthony

+0

Haben Sie diesen Anthony repariert? Ich habe einen ähnlichen Fehler, obwohl meins nicht mit C++ zu tun ist –

+0

Hallo James, leider nicht - niemand hat irgendeinen nützlichen Rat angeboten. Ich war über Weihnachten weg und werde nächste Woche wieder nachsehen, da es ein wichtiges Projekt für uns ist. Was genau ist dein Problem? Ein C# -Projekt? Die app.config Datei in meinem Beitrag sollte dabei helfen ... – Anthony

+0

Meine ist mit C# und Portable Class Libraries für Windows Phone/8 zu tun Ich fand eine stackoverflow Frage, die kurz nach http://stackoverflow.com/ Fragen/12597797/using-async-ctp-mit-portable-class-Bibliothek. Obwohl der Fehler ziemlich ähnlich ist, scheint es für Ihr Problem leider nicht relevant –

Antwort

6

hatte ich das gleiche Problem und wie sich herausstellte, <SpecificVersion>True</SpecificVersion> geholfen.

Bevor Sie weiter lesen, beachten Sie, dass das Problem zu scheint nur passieren, wenn die C++/CLI Projekt erstellt wird mit dem "Visual Studio 2012 - Windows XP (v110_xp)" Plattform Toolset! Wenn Sie keine DLL erstellen müssen, die mit WinXP kompatibel ist, wechseln Sie stattdessen zu "Visual Studio 2012 (v110)" und Sie sollten in Ordnung sein.

Lassen Sie mich mein Szenario erarbeiten:

Ich habe eine C++/CLI -Konsolenanwendungsprojekt (ConsoleAppCLI) für WinXP (v110_xp) ausgerichtet. ConsoleAppCLI verweist auf eine Bibliothek (AsyncLib) die Microsoft.Bcl.Async über NuGet installiert hat:

[ConsoleAppCLI.vcxproj] (C++/CLI, .NET 4.0 v110_xp) 
      | 
      | 
    [AsyncLib.csproj]  (C#, .NET 4.0) 
      | 
      | 
[Microsoft.Bcl.Async] (via NuGet) 

ich genau das gleiche Problem hatte und die app.config half auch nicht, aber was half war die folgenden:

  1. Unload ConsoleAppCli.vcxproj
  2. Bearbeiten Sie die Datei direkt vcxproj
  3. den Verweis auf die Bibliothek suchen, die das hat Async-Nugget-Paket installiert (in meinem Fall ein <ProjectReference> zu AsyncLib.csproj)
  4. Zwischen <ProjectReference> und </ProjectReference>, fügen Sie die folgenden: <SpecificVersion>True</SpecificVersion>

ist jedoch zu beachten, dass ConsoleAppCLI war mein Top-Level-Projekt in der Abhängigkeitsstruktur. Wenn Sie Assemblys haben, die von der C++/CLI-Assembly abhängen, die MSB3268 erzeugt hat, müssen Sie ebenfalls <SpecificVersion>True</SpecificVersion> zu der Referenz hinzufügen (zB wenn ich eine zusätzliche C# -Bibliothek mit ConsoleAppCli als Abhängigkeit hätte, müsste ich den Verweis auf ConsoleAppCli <SpecificVersion>True</SpecificVersion> machen auch).

Diese Lösung kommt übrigens von over here.

+1

+1 Ich hatte das gleiche Problem mit einem .Net 4.0-Projekt mit der asynchronen Erweiterung, was bedeutete, dass unser C++ - Hauptprojekt nicht mehr erstellt würde. Hinzugefügt die "SpecificVersion" und alles ist wieder gut ... Danke – reSPAWNed

+0

kann ich auch bestätigen, dies beschreibt das eigentliche Problem und die Lösung funktioniert gut. Vielen Dank! – DiableNoir