2010-08-16 16 views
23

Próbuję założyć zespół wiążącej przekierowanie, stosując następujący app.config:Montaż wiązania przekierowanie nie działa

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.AnalysisServices" 
          PublicKeyToken="89845dcd8080cc91" /> 
     <bindingRedirect oldVersion="10.0.0.0" 
         newVersion="9.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Używam programu na komputerze z wersji 9.0.242.0 w GAC z określonym tokenem klucza publicznego. Wydaje się, że CLR nie próbuje przekierować wiązania, aby użyć tej wersji.

Oto co mam w fuslogvw.exe:

LOG: This bind starts in default load context. LOG: Using application configuration file: \Debug\AssemblyRedirectPOC.exe.Config LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. LOG: Post-policy reference: Microsoft.AnalysisServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.EXE. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.EXE. LOG: All probing URLs attempted and failed.

Kiedy próbowałem oddanie dll wersji 9.0.242.0 w ścieżce sondy, mam to w zamian:

LOG: Assembly download was successful. Attempting setup of file: \Debug\Microsoft.AnalysisServices.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: Microsoft.AnalysisServices, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Należy zauważyć, że próbowałem zmienić przekierowanie na "9.0.242.0" zamiast "9.0.0.0" w pliku app.config i to nie działało, chociaż uważam, że nie powinno to mieć znaczenia.

Z tego co rozumiem, cały sens przekierowania wiązania polega na użyciu wersji, która nie jest zgodna z wersją, z której został zbudowany program. Czy całkowicie tu czegoś brakuje? Czy to, co staram się robić, a jeśli tak, to jakikolwiek pomysł, dlaczego to nie działa?

zdrowie, Adam

Odpowiedz

17

inną nazwę w języku XML konfiguracji może być przyczyną. Program ładujący po prostu nie widzi Twojej konfiguracji. Miałem również godzinę głowy aż Zdaję sobie sprawę, że błąd był w znaku „=” zamiast „-” w nazwie schematu:

<assemblyBinding xmlns="urn:schemas=microsoft-com:asm.v1"> 

Wystarczy sprawdzić dokładnie wszystkie nazwy i wartości atrybutów. Chyba „TokenKluczaPublicznego” powinno być „TokenKluczaPublicznego”

To powinno działać:

<configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Microsoft.AnalysisServices" publicKeyToken="89845dcd8080cc91" /> 
      <bindingRedirect oldVersion="10.0.0.0" newVersion="9.0.0.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
</configuration> 
+1

dodanie 'xmlns =" ​​urn: schemas = microsoft-com: asm.v1 "' rozwiązało problem dla mnie.Dzięki! – trailmax

+17

Złe (z = zamiast -) * przepracowany * dla ciebie? – Zack

7

natknąłem wiążącej przekierowanie nie działa z powodu brakującej przestrzeni nazw na elemencie assemblyBinding.

Prawidłowe

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="TIBCO.Rendezvous" publicKeyToken="1a696d1f90f6158a"/> 
    <bindingRedirect oldVersion="1.0.0.0-1.0.3191.28836" newVersion="1.0.3191.28836"/> 
    </dependentAssembly> 

Nieprawidłowa

Uwaga brakuje: xmlns = "urn: schematy-microsoft-com: asm.v1"

<assemblyBinding> 
    <dependentAssembly> 
    <assemblyIdentity name="TIBCO.Rendezvous" publicKeyToken="1a696d1f90f6158a"/> 
    <bindingRedirect oldVersion="1.0.0.0-1.0.3191.28836" newVersion="1.0.3191.28836"/> 
    </dependentAssembly> 

+1

Twoje przykłady konfiguracji wyglądają identycznie – MisterMetaphor

+0

Tak, przepraszam zaktualizowałem przykład –

2

w moim przypadku musiałem wyjąć

appliesTo="v2.0.05727" 

z

<assemblyBinding appliesTo="v2.0.05727" xmlns="urn:schemas-microsoft-com:asm.v1"> 
3

mój problem został rozwiązany, gdy przeniosłem wiążące konfiguracji przekierowania do Machine.config pliku.

+1

Przeprowadzka bindingredirects do Machine.Config rozwiązał mój problem – Ziggler

1

Ekscentryczne zasady haseł mogą również powodować ignorowanie elementów assemblyBinding w konfiguracji. Znaki takie jak "&" i "^" najwyraźniej nie są dozwolone w pliku konfiguracyjnym. Narzędzia XML w Notepad ++ ujawniły mi to po kilku godzinach manipulowania przy pomocy Binding Log Viewer.

3

Miałem podobny problem, gdy przenoszenie bindingredirects do Machine.Config było jedyną rzeczą, która działała. To nie było idealne rozwiązanie w mojej aplikacji WinForm, ponieważ rozpowszechniam moją aplikację wśród klientów.

Rozwiązanie:

Upewnij plik .config w katalogu, w którym aplikacja jest uruchomiona z. na przykład jeśli nazwa aplikacji to "MojaAplikacja", przekierowania powinny znajdować się w pliku "MyApp.exe.Config" w katalogu aplikacji.

Musiałem to zrobić, nawet jeśli kod korzystający z bibliotek DLL innych firm jest w innym pliku dll w moim rozwiązaniu, a dodanie pliku .dll.config nie pomogło.

+0

Przeniesienie bindredirects do Machine.Config rozwiązało mój problem. – Ziggler

4

Upewnij się, że twój tag ma bez atrybutu przestrzeni nazw. W przeciwnym razie dowolny znacznik <assemblyBinding> zostanie zignorowany.

Źle:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

prawej:

<configuration> 

(od https://stackoverflow.com/a/12011221/150370)

0

Jeśli jest jakiejkolwiek pomocy nikomu, wpadłem na to, bo nie umieścić pełną wersję w przypadku nowej wersji. to znaczy, miałem newVersion="3.0.1" zamiast newVersion="3.0.1.0"

0

Sprawdź, czy błędach Wyraźna wiązania przekierowanie na xxx, Kultura = neutral, TokenKluczaPublicznego = xxx”konflikty z wygenerowany automatycznie wiążące przekierować

pojawia się w oknie wyjściowym (wygrał pojawi się w oknie błędu)

Powiązane problemy