2010-04-22 19 views
35

Próbowałem użyć svcutil.exe do generowania klas proxy dla usługi, ale kiedy używam opcji /reference do odniesienia do zespołu zbudowanego dla .NET 4.0, pojawia się błąd.Svcutil.exe dla .NET 4.0?

Could not load file or assembly [...] or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

Wygląda na to, że używam starej wersji svcutil.exe. Używam tego w "C:\Program Files\Microsoft SDKs\Windows\v7.0A, który był ostatnim, jaki mogłem znaleźć. Czy istnieje gdzieś wersja, której powinienem użyć?

Odpowiedz

59

Miałem ten sam problem. Jeśli projekt jest skonfigurowany do korzystania z .NET Framework 4.0, należy wybrać odpowiednią wersję svcutil.exe, czy będzie to wygeneruje błąd: „Nie można załadować ...”

  • Jeśli spojrzeć na " Microsoft SDK \ Windows \ v6.0A \ Bin ", zobaczysz, że wersja tego exe to" 3.0.4506.2152 ".
  • Wersja SvcUtil.exe w "Microsoft SDKs \ Windows \ v7.0A \ Bin" jest dokładnie taka sama, więc rzuciła mnie również na pętlę.

Jednak istnieje inna wersja svcutil.exe się w SDK "Microsoft \ Windows \ v7.0A \ Bin \ NETFX 4,0 Narzędzia", ​​który jest w wersji "4.0.30319.1", a jeśli go używać, wszystko powinno działać.

+0

Zestawy SDK firmy Microsoft \ Windows \ v7.0A \ Bin \ NETFX 4.0 to poprawna odpowiedź. Dzięki! – Mark

+0

Dziękuję, skarbie, jestem bardzo wdzięczny ... etc <3 (nielegalny komentarz, wiem, wszystkie inne po prostu głosują to) –

0

Zgodnie z tym linkiem do .Net 4.0 powinieneś użyć jednego w C: \ Program Files \ Microsoft SDK \ Windows \ v6.0 \ Bin.

http://msdn.microsoft.com/en-us/library/aa347733.aspx

wydaje się nieco dziwne, jednak jeśli ktoś w v7.0A dir jest zbyt stary.

+0

Sprawdziłem i obie są tej samej wersji, 3.0.4506.2152, więc pojawia się ten sam błąd podczas próby wykonania tego . –

+0

Spróbuj tego zamiast może: http://stackoverflow.com/questions/896629/how-to-run-clr-2-application-as-clr-4-application –

0

Dlaczego nie przebudować jako .NET 3.5, aby wygenerować klasy? Podejrzewam, że typy, dla których generujesz klasy, nie opierają się na żadnej funkcji .NET 4.0. Pliki cs nie będą dbały o to, do której wersji została zbudowana biblioteka DLL, aby można było z nich korzystać w projekcie 4.0.

+0

Chcę uruchomić svcutil jako wydarzenie kompilacji, więc oznacza to zawsze mając mój zestaw referencyjny skompilowany jako .Net 3.5. Działa na razie, ponieważ nie ma tam jeszcze żadnej funkcjonalności 4.0, ale chcę móc go później dodać. Nadal jestem zainteresowany znalezieniem rzeczywistego powodu mojego problemu. Czy nie ma dostępnej wersji svcutil obsługującej .Net 4? Czy będzie? –

+0

Zaznaczę to jako zaakceptowaną odpowiedź, ponieważ jest to na razie dopuszczalne rozwiązanie. Wciąż jednak interesuje więcej odpowiedzi. –

0

Mam ten sam problem.

Microsoft twierdzi, że możesz używać tylko bibliotek DLL .Net 4 z nowym SvcUtil, który jest dostarczany z najnowszą wersją .Net (http://msdn.microsoft.com/en-us/library/aa347733.aspx), ale ta wersja wydaje się być tą, o której wspomniałeś powyżej. To nie będzie miało dostępu do bibliotek DLL .Net 4 jako odniesień.

7

Najnowsza wersja SDK dla .NET 4.0 jest dostępny w

http://msdn.microsoft.com/en-us/windows/bb980924.aspx

svcutil.exe który rezyduje w v7.1/bin ma wersji 3.0.4506.2152.

svcutil.exe który rezyduje w V7.1/bin/NETFX 4,0 Narzędzia ma wersji 4.0.30319.1.

+0

Zainstalowałem 7.1, a folder BIN nie ma svcutil.exe .. –

+0

Okazuje się, że domyślna instalacja SDK nie wybrała opcji .NET Tools. Po wybraniu tego pliku instalowane są pliki svcutil.exe. –

0

Aktualizacja: Najnowszy wersja util nie V7.0 według:

Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools

svcutil.exe v8.0A jest teraz dostępny po zainstalowaniu programu Visual Studio 2012 (VS 2012)

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe"

Co naprawdę chcesz to pełna definicja do toczenia pliku WSDL do klienta usług:

/n:*,MyCompany.Services.Client /out:IServiceInterface.cs ServiceDefinition.wsdl.xml

Gdzie definition.wsdl serwis jest oczywiście odpowiedzią? WSDL ze starego mydlanego punktu końcowego.

Słupy i Trolle pamiętają! Wszystko jest teraz Async, więc szukaj i korzystaj z nowej asynchronicznej obsługi generowanej przez v8.0 SVCUtil.exe