VSTS 2010 SGEN: błąd: nie można załadować pliku lub zestawu (wyjątek od HRESULT: 0x80131515)


106

Mam dziwny problem z VS2010. Używamy TFS do budowania naszych bibliotek dll API i używaliśmy ich do odwoływania się w naszych projektach przy użyciu mapowanego dysku sieciowego, który był w pełni zaufany. Pracowaliśmy tak od co najmniej dwóch lat i wszystko działało idealnie.

Dzisiaj przekonwertowałem aplikację internetową na vs2010 i kiedy kompiluję ją w wersji Release, otrzymuję:

SGEN: błąd: nie można załadować pliku lub zestawu „file: /// L: \ Api \ Release API_20100521.1 \ Release \ CS.API.Exceptions.dll” lub jednej z jego zależności. Operacja nie jest obsługiwana. (Wyjątek od HRESULT: 0x80131515)

Dziwne jest to, że działa, gdy znajduje się w profilu debugowania ...

Próbowałem dodać

<runtime>
   <loadFromRemoteSources enabled="true" />
</runtime>

do app.config i nadal nie ma szczęścia (patrz http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0 i http://msdn.microsoft.com/ en-us / library / dd409252 (VS.100) .aspx )

Jestem prawie pewien, że ten problem pochodzi z Visual Studio lub MSBuild, ponieważ nasz kod nie będzie działał z udziału sieciowego w wersji produkcyjnej, ponieważ wszystkie pliki DLL, do których się odwołuje, są kopiowane do folderu bin.

Jeśli ktoś ma rozwiązanie (lub po prostu pomysł na ścieżkę wyszukiwania) to daj mi znać!

Edycja: Okazuje się, że działał w trybie debugowania, ponieważ generowanie zestawów serializacji zostało wyłączone. Jak mówi tytuł, to naprawdę problem z SGEN, ponieważ to narzędzie mówi, że ścieżka nie jest zaufana ...

Odpowiedzi:


213

Udało mi się naprawić ten błąd, znajdując bibliotekę DLL zestawu w Eksploratorze Windows, klikając prawym przyciskiem myszy, wybierając opcję Właściwości, a następnie naciskając przycisk „odblokuj”. Biblioteka DLL ma strumień oznaczający ją jako plik zewnętrzny - i klikając odblokuj, usuwasz to oznaczenie.


pracował ... tylko programista miał ten problem .. prosto z TFS ... dziwne
spaghetticowboy

Powodem, dla którego został zablokowany, jest to, że mój kod źródłowy znajdował się na udziale. Przeniesiono kod na dysk lokalny - wszystko poszło dobrze. (Uprawnienia .NET4 SGEN dotyczące emisji akcji).
thedrs

31
Niech cię Bóg błogosławi. Poważnie.
FAtBalloon

Należy pamiętać, że większość firm nie zezwala na dostęp administratora lokalnego lub wyraźnie wyłącza dostęp do przycisku „Odblokuj” zwykłym użytkownikom, w tym programistom.
kevinarpe

2
Miałem ten problem z bibliotekami DLL skopiowanymi z pliku zip.
79IT

59

Właśnie miałem ten sam / podobny problem na serwerze kompilacji TFS, gdzie kompilacja odwoływała się do bibliotek dll z udziału sieciowego.

Problem polega na tym, że model zasad bezpieczeństwa CLR v4 zmienił się od czasu poprzednich wersji i nie są zestawami piaskownicy, jak poprzednio.

Aby rozwiązać problem, po prostu znajdź lokalizację sgen.exe i utwórz plik sgen.exe.config w tym samym folderze z następującą zawartością:

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

sgen.exe zwykle znajduje się pod adresem

"C:\Program Files\Microsoft SDKs\Windows\v[current version]\bin\NETFX 4.0 Tools"

Możesz przeczytać o niektórych zmianach dotyczących zasad CAS w .NET 4.0 w tym wpisie na blogu: Link


1
tak, natknąłem się na to rozwiązanie, ale było dla mnie bezużyteczne, niczego nie zmieniłem ... rozwiązaliśmy, ponieważ zespoły serializacji zostały wyłączone
Developer IT

7
Dla innych informacji SGEN znajduje się zwykle pod adresem „C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools”
Steve Cooper

Deweloper IT: w moim przypadku nie mogłem wyłączyć generowania zestawów serializacji, ponieważ ich potrzebowałem. Ale rozwiązaniem może być również wyłączenie zestawów serializacji.
Martin Hyldahl

1
Zauważ, że jeśli jest to maszyna 64-bitowa, musisz utworzyć pod ... \ Bin \ NETFX 4.0 Tools \ x64 \
Vivek Ayer

1
W przypadku VS2015 zlokalizuj go w: C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools
Farshid

23

Miałem ten sam problem i zmiana konfiguracji nie zadziałała. Zadziałało to tylko wtedy, gdy we właściwościach projektu ustawiłem opcję Generuj zestaw serializacji na wyłączone.


U mnie też zadziałało. To jest również poprawna odpowiedź dla PO na podstawie jego zredagowanego komentarza w pytaniu.
akousmata

Pracował dla mnie. Tks.
Vinicius Gonçalves

1
Właściwości projektu -> Build -> Generate serialization Assembly było Auto, po wyłączeniu kompilacji zaczęła działać jak urok. +1 i dzięki.
Honza P.

To zadziałało również w moim przypadku. W każdym razie zastanawiam się, co dokładnie oznacza wyłączenie go, ponieważ domyślnie jest włączony dla konfiguracji wydania: chciałbym mieć pewność, że nie będzie to miało żadnego efektu ubocznego na aplikację, gdy opublikuję ją w środowisku produkcyjnym.
Asimov

Tylko jeden projekt miał ten problem - zmienił go z Auto na Off - ten projekt odwoływał się do SOAP WS.
Subha


3

Miałem dokładnie ten sam problem i naprawiłem go, dodając sgen.exe.config w C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

z tą prostą konfiguracją, jak powiedzieli inni

<?xml version ="1.0"?>
<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

2

Dla tych z Was, którzy używają 64-bitowej wersji usługi kompilacji TFS, musiałem utworzyć plik konfiguracyjny w następującej ścieżce:

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

A zawartość pliku:

<?xml version ="1.0"?>
<configuration>
<runtime>
    <loadFromRemoteSources enabled="true" />
</runtime>
</configuration>

1

Miałem ten sam problem, załadowałem montaż w GAC i działałem


chodzi o to, że nie chcemy ich w GAC. rozwiązaliśmy problem wyłączenia zestawów serializacji
Developer IT,

1

Dodanie poniższego fragmentu do pliku app.config zadziałało w moim przypadku. Używam systemu Windows XP z dodatkiem Service Pack 1 dla VS2010.

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

0

Podobnie jak informacja do Twojej wiadomości, jeśli używasz systemu Windows 7, plik sgen.exe można znaleźć pod adresem:

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

Musiałem utworzyć plik sgen.exe.config i umieścić go tam, a następnie problem zniknął.


0

Ani to, unblockani nie configdziałały dla mnie. Na czym polegała ta wskazówkacaspol . Pobiegłem

 %windir%\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -m -ag 1.2 -url file://UncPathName/UncSubPath/* FullTrust

Byłem gotowy do pracy, nawet restart VisualStudio nie był wymagany.


0

Pojawił się podobny problem iw końcu udało mi się go uporać, usuwając plik license.licx w folderze Właściwości rozwiązania.


0

Tak jak ja, Unblock nie był rozwiązaniem, ponieważ Unblock nie pojawia się we właściwościach mojego pliku dll. Ciągle szukałem i zakończyło się zamknięciem pliku rozwiązania i ponownym otwarciem przy użyciu lokalnej kopii C: zamiast sieciowej ścieżki UNC do pliku sln projektu. Był w stanie opublikować po przejściu tej trasy.


0

W moim przypadku kilka bibliotek dll zostało zablokowanych.

Aby odblokować wszystkie pliki w folderze, użyłem powłoki Power z następującym poleceniem

dir -Path [directory path] -Recurse | Unblock-File
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.