Próbuję skompilować mój dodatek Excel przy użyciu C # 4.0 i zacząłem dostawać ten problem podczas budowania mojego projektu w Visual Studio. Ważne jest, aby powiedzieć, że wcześniej nie miałem tego problemu. Co może tak się stać?
Próbuję skompilować mój dodatek Excel przy użyciu C # 4.0 i zacząłem dostawać ten problem podczas budowania mojego projektu w Visual Studio. Ważne jest, aby powiedzieć, że wcześniej nie miałem tego problemu. Co może tak się stać?
Odpowiedzi:
Domyślam się, że nie pracujesz z silnie nazwanymi zestawami. Wystąpił ten błąd, gdy dwa projekty odnoszą się do nieco różnych wersji tego samego zestawu, a projekt bardziej zależny odnosi się do tych projektów. Rozwiązaniem w moim przypadku było usunięcie klucza i informacji o wersji z nazwy zestawu w plikach .csproj (i tak nie miało to znaczenia), a następnie wykonanie czystej kompilacji.
Zmiany między różnymi wersjami zestawu były zgodne z odnoszącymi się do nich częściami rozwiązania. Jeśli tak nie jest, może być konieczne wykonanie dodatkowej pracy w celu rozwiązania problemu.
Dzięki NuGet łatwo jest znaleźć się w takiej sytuacji, jeśli:
Powoduje to, że w twoim rozwiązaniu są dwa projekty odwołujące się do różnych wersji zestawów tego pakietu. Jeśli jeden z nich odnosi się do drugiego i jest aplikacją ClickOnce, zobaczysz ten problem.
Aby to naprawić, wydaj update-package [package name]
polecenie w konsoli Menedżera pakietów Nuget, aby wszystko wyrównać, w tym momencie problem zniknie.
Powinieneś zarządzać pakietami NuGet raczej na poziomie rozwiązania niż na poziomie projektu, chyba że istnieje ważny powód, aby tego nie robić. Zarządzanie pakietami na poziomie rozwiązania pozwala uniknąć wielu wersji zależności. Podczas korzystania z interfejsu zarządzania, jeśli karta Skonsolidowane pokazuje, że 1 lub więcej pakietów ma wiele wersji, rozważ konsolidację ich do jednej.
Kiedy miałem ten problem, naprawiłem go, wyłączając „Włącz ustawienia bezpieczeństwa ClickOnce”.
Menu: Projekt | „Nazwa projektu” Właściwości ... | Karta Zabezpieczenia | Pole wyboru „Włącz ustawienia bezpieczeństwa ClickOnce”.
Zobacz tę odpowiedź .
Przejdź do strony publikowania i kliknij „Pliki aplikacji”. Stamtąd powinna zostać wyświetlona lista bibliotek DLL. Upewnij się, że osoby sprawiające kłopoty mają status Publikowania oznaczony jako „Uwzględnij”, a nie „Wymaganie wstępne”.
Jeśli zmieniłeś wersję zestawu lub skopiowałeś inną wersję biblioteki zarządzanej podaną w błędzie, być może wcześniej skompilowałeś pliki odwołujące się do niewłaściwej wersji. „Odbuduj wszystko” (lub usuwając foldery „bin” i „obj”, jak wspomniano we wcześniejszym komentarzu) powinno naprawić ten przypadek.
musisz podpisać zestaw za pomocą klucza. Przejdź do właściwości projektu w obszarze podpisywania kart:
Dodanie mojego rozwiązania tego problemu dla każdego, kto może mu pomóc.
Miałem rozwiązanie ClickOnce zgłaszające ten błąd. Aplikacja odnosiła się do wspólnego folderu „Libs” i zawierała odwołanie do projektu do Foo.dll
. Chociaż żaden z projektów w rozwiązaniu nie odwoływał się do statycznej kopii Foo.dll
w folderze „Libs”, niektóre z odnośników w tym folderze tak (tj. Moje rozwiązanie miało Libs\Bar.dll
odniesienia do których odnośników Foo.dll
). Ponieważ aplikacja CO wyciągnęła wszystkie zależności zLibs
jak również ich zależności, obie kopie zostały włączone do projektu. To generowało błąd powyżej.
Naprawiłem problem przesuwając moją Libs\Foo.dll
wersję statyczną do podfolderu, Libs\Fix\Foo.dll
. Ta zmiana spowodowała, że aplikacja ClickOnce używała tylko wersji DLL projektu i błąd zniknął.
Usunięcie biblioteki DLL (gdzie wystąpił błąd) i ponowne zbudowanie rozwiązania rozwiązało mój problem. Dzięki
Jeśli wypróbowałeś wszystkie pozostałe odpowiedzi w tym pytaniu i:
... możesz mieć osobne wersje biblioteki DLL pakietów NuGet w swoich projektach „Referencje, ponieważ referencja utworzona przez Intellisense / ReSharper będzie„ normalną ”referencją, a nie referencją NuGet zgodnie z oczekiwaniami, więc proces aktualizacji NuGet wygrał” znajdź lub zaktualizuj to!
Aby to naprawić, usuń odniesienie w Projekcie A, a następnie użyj NuGet, aby go zainstalować i upewnij się, że pakiety NuGet we wszystkich projektach mają tę samą wersję. (jak wyjaśniono w tej odpowiedzi )
Ten problem może pojawić się za każdym razem, gdy ReSharper / Intellisense sugeruje dodanie odniesienia do twojego projektu. Może być znacznie bardziej skomplikowany niż w powyższym przykładzie, z wieloma projektami i zależnościami, które utrudniają odnalezienie. Jeśli referencje sugerowane przez ReSharper / Intellisense pochodzą z pakietu NuGet, użyj NuGet, aby je zainstalować.
W moim rozwiązaniu było zbyt wiele projektów, aby przejść i indywidualnie je zaktualizować, więc naprawiłem to przez:
Ten problem napotkałem po migracji dodatku Excel z Package.config do PackageReference. Wydaje się, że ma to związek z tym problemem .
Poniższe działa jako przybliżone obejście, jeśli nie używasz ClickOnce (spowoduje to pominięcie wszystkich informacji o zależnościach w .manifest
pliku):
Znajdź sekcję wyglądającą następująco:
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
Edytuj kopię .targets
pliku o zmienionej nazwie (w moim przypadku plik został rozwiązany C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
i zrobiłem kopię Microsoft.VisualStudio.Tools.Office_FIX.targets
w tym samym folderze - nie sprawdziłem, czy działa z innego folderu).
Znajdź GenerateApplicationManifest
element i zmień jego atrybut Dependencies="@(DependenciesForGam)"
na Dependencies=""
.
Zmień sekcję w 2., aby .targets
zamiast tego odwoływała się do edytowanego pliku.
Będzie to musiało być powtarzane za każdym razem, gdy wersja .targets
pliku dostarczonego z VS jest aktualizowana (w przeciwnym razie nie dostaniesz aktualizacji), ale mam nadzieję, że wkrótce zostanie naprawiona ...
Czy Twój zespół jest właściwie podpisany?
Aby to sprawdzić, naciśnij Alt + Enter na swoim projekcie (lub kliknij prawym przyciskiem myszy, a następnie Właściwości). Przejdź do „Podpisywanie”. Sprawdź, czy pole wyboru „Podpisz zespół” jest zaznaczone, czy plik klucza z silną nazwą jest zaznaczony, a pole „Tylko znak opóźnienia” nie jest zaznaczone .
Oto inne podejście do problemu:
Kliknij projekt prawym przyciskiem myszy i wybierz opcję „Zwolnij projekt”. Zauważysz, że Twój projekt staje się niedostępny.
Kliknij prawym przyciskiem myszy niedostępny projekt i wybierz opcję „Edytuj”.
Przewiń w dół do znacznika „<ItemGroup>”, który zawiera wszystkie znaczniki zasobów.
Teraz przejdź do odwołania wyświetlonego na liście błędów, zauważysz, że używa pojedynczego znacznika (tj < Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >
.).
Zmień to, aby wyglądać następująco:
.
<Reference Include="assemble_name_here, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
< Private > True < / Private >
< HintPath > path_here\assemble_name_here.dll < / HintPath >
< / Reference >
Jeśli twój główny projekt korzysta z niektórych projektów bibliotecznych i masz do nich odniesienia, możesz spowodować ten problem, jeśli odwołanie do pliku dll zestawu zamiast do projektu biblioteki, gdy zmienisz coś w projekcie biblioteki (np. Zmień nazwę klasy).
Możesz sprawdzić wszystkie odniesienia do głównego projektu, przeglądając w oknie Przeglądarki obiektów (menu Widok-> Przeglądarka obiektów). Odwołanie do pliku dll ma zawsze numer wersji. Przykład: TestLib [1.0.0.0]
Rozwiązanie: usuń bieżące odniesienie głównego projektu do projektu biblioteki i ponownie dodaj odwołanie do tego projektu biblioteki.
Po wypróbowaniu większości rozwiązań tutaj, w końcu właśnie dodałem odniesienie do projektu z projektu „kliknij raz”, co zmieniło go na Uwzględnij (Auto) z Uwzględnij i wreszcie działało.
Miałem to w rozwiązaniu z 6 projektami. Jeden z moich projektów odwoływał się do nazwanego zestawu jako odwołania do pliku. Wszyscy inni wskazywali na odniesienie do projektu.
W takich przypadkach zwykle pojawia się inny błąd.
Moim rozwiązaniem było usunięcie nazwanego zestawu w dowolnym miejscu, do którego się on odwołuje, i dodanie go z powrotem. Gdy pracowałem nad projektem, problem zniknął. Zanim to zrobiłem, spróbowałem wyczyścić rozwiązanie, a także upewnić się, że żaden z projektów nie został podpisany.
mam nadzieję, że to pomoże komuś ...
Jeśli jest to niezgodność zależności, przejdź do menedżera pakietów NuGet na poziomie rozwiązania i sprawdź karty Aktualizuj i Konsoliduj, zharmonizuj wszystko.
Niedawno trafiłem na ten problem. W moim przypadku mam pakiety NuGet na różnych zestawach. Miałem różne wersje tych samych pakietów NuGet powiązanych z moimi własnymi zestawami.
Moim rozwiązaniem było użycie menedżera pakietów NuGet w Rozwiązaniu, w przeciwieństwie do poszczególnych projektów. Umożliwia to opcję „konsolidacji”, w której można aktualizować pakiety NuGet w dowolnej liczbie projektów - wszystkie odnoszą się do tej samej wersji zestawu. Gdy wykonałem konsolidację, błąd kompilacji zniknął.
Spróbuj z pakietem aktualizacji -reinstall -ignoredependencies
bin
iobj
swój projekt, i ponownie zbuduj projekt. Czasami to działa.