Я намагаюся скласти свій excel addin за допомогою C # 4.0 і почав отримувати цю проблему під час створення мого проекту в Visual Studio. Важливо сказати вам, що раніше у мене не було цієї проблеми. Що може спричинити це?
Я намагаюся скласти свій excel addin за допомогою C # 4.0 і почав отримувати цю проблему під час створення мого проекту в Visual Studio. Важливо сказати вам, що раніше у мене не було цієї проблеми. Що може спричинити це?
Відповіді:
Я здогадуюсь, що ви не працюєте з сильно названими складами. У мене виникла помилка, коли два проекти посилаються на трохи різні версії однієї збірки і більш залежні проекти посилаються на ці проекти. У моєму випадку було вирішено видалити інформацію про ключ та версію з назви збірки у файлах .csproj (все одно це не мало значення), а потім виконати чисту збірку.
Зміни між різними версіями складання були сумісні з частинами рішення, що посилаються на них. Якщо з вами це не так, можливо, вам доведеться провести ще одну роботу, щоб вирішити проблему.
З NuGet легко потрапити в цю ситуацію, якщо:
Це призводить до двох проектів у вашому рішенні, де посилаються на різні версії складання цього пакету. Якщо одна з них посилається на іншу і є програмою ClickOnce, ви побачите цю проблему.
Щоб виправити це, update-package [package name]
видайте команду на консолі диспетчера пакунків Nuget, щоб привести все до рівних ігрових умов, і в цей момент проблема усунеться.
Вам слід керувати пакетами NuGet на рівні рішення, а не на рівні проекту, якщо немає вагомих причин цього не робити. Управління пакетом рішень дозволяє уникнути потенціалу декількох версій залежностей. Якщо ви користуєтесь інтерфейсом управління, якщо на вкладці " Консолідований" показано, що 1 або більше пакетів мають кілька версій, розгляньте можливість їх об'єднання в одну.
У мене виникла ця проблема, я вирішив її, вимкнувши "Увімкнути параметри безпеки ClickOnce".
Меню: Проект | "Назва проекту" Властивості ... | Вкладка безпеки | Повідомити прапорець "Увімкнути настройки безпеки ClickOnce".
Дивіться цю відповідь .
Перейдіть на сторінку публікації та натисніть "Файли додатків". Звідти вам слід побачити список ваших DLL-файлів. Переконайтесь, що ті, хто створює проблеми, мають статус публікації, позначений як "Включити", а не "Попередня умова".
Якщо ви змінили версію збірки або скопіювали іншу версію керованої бібліотеки, зазначену в помилці, можливо, раніше були складені файли, що посилаються на неправильну версію. "Виправити всі" (або видалити папки "bin" та "obj", як згадувалося в попередньому коментарі) має виправити цю справу.
вам потрібно підписати збірку ключем. Перейдіть у властивості проекту під підписанням вкладки:
Додавання мого рішення цієї проблеми для кожного, хто може допомогти.
У мене було рішення ClickOnce, яке видало цю помилку. Додаток посилалося на загальну папку "Libs" і містило посилання на проект на Foo.dll
. Хоча жоден з проектів у рішенні не посилався на статичну копію Foo.dll
в папці "Libs", деякі з посилань у цій папці зробили (тобто: моє рішення було посиланням на Libs\Bar.dll
яке посилання Foo.dll
.) Оскільки програма CO витягнула всі залежності від Libs
як і їх залежності, обидві копії збиралися в проект. Це генерувало помилку вище.
Я виправив цю проблему, перемістивши свою Libs\Foo.dll
статичну версію в підкаталог, Libs\Fix\Foo.dll
. Ця зміна дозволила додатку ClickOnce використовувати лише версію проекту DLL та помилка зникла.
Видалення DLL (там, де трапилася помилка) та повторна побудова рішення вирішили мою проблему. Дякую
Якщо ви спробували всі інші відповіді на це запитання, і ви:
... у вас можуть бути окремі версії пакетів DLG NuGet у посиланнях ваших проектів, оскільки посилання, створене Intellisense / ReSharper, буде "нормальною" посиланням, а не посиланням NuGet, як очікувалося, тому процес оновлення NuGet переміг " не знайти або оновити його!
Щоб виправити це, видаліть посилання в Project A, потім використовуйте NuGet для його встановлення та переконайтесь, що пакети NuGet у всіх проектах є однаковою версією. (як поясніть у цій відповіді )
Ця проблема може виникнути, коли ReSharper / Intellisense пропонує додати посилання на ваш проект. Це може бути набагато глибше заплутаним, ніж наведений вище приклад, завдяки численним переплетенням проектів та залежностей, що ускладнює їх пошук. Якщо посилання, запропоноване ReSharper / Intellisense, насправді є пакетом NuGet, використовуйте NuGet для його встановлення.
У моєму рішенні було занадто багато проектів, щоб пройти і індивідуально оновити, тому я це виправив:
Я зіткнувся з цією проблемою після міграції Excel Addin з пакета.config до PackageReference. Здається, це стосується цього питання .
Наведене нижче працює як грубе вирішення, якщо ви не використовуєте ClickOnce (він опустить всю інформацію про залежність з .manifest
файлу):
Знайдіть розділ, який виглядає так:
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
Відредагуйте перейменовану копію посиланого .targets
файлу (у моєму випадку файл вирішено, C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
і я зробив копію Microsoft.VisualStudio.Tools.Office_FIX.targets
в одній папці - не перевірив, чи працює він з іншої папки).
Знайдіть GenerateApplicationManifest
елемент і змініть його атрибут Dependencies="@(DependenciesForGam)"
на Dependencies=""
.
Змініть розділ, знайдений у розділі 2., щоб посилатися на ваш відредагований .targets
файл.
Це потрібно буде повторювати щоразу, коли версія .targets
файлу, що постачається з VS, оновлюється (або ви не отримаєте оновлення), але я сподіваюся, що це буде виправлено незабаром ...
Чи правильно підписана ваша асамблея?
Щоб перевірити це, натисніть Alt + Enter у своєму проекті (або клацніть правою кнопкою миші, а потім Властивості). Перейдіть до розділу "Підписання". Переконайтесь, що прапорець "Підписати збірку" встановлено, і вибрано файл міцного ключа імені та не буде встановлено прапорець "Тільки знак затримки" .
Тепер ось інший підхід до проблеми:
Клацніть правою кнопкою миші на проект та оберіть опцію 'Unload Project'. Ви помітите, що проект стає недоступним.
Клацніть правою кнопкою миші на недоступному проекті та оберіть опцію "Редагувати".
Прокрутіть униз до тегу "<ItemGroup>", який містить усі теги ресурсів.
Тепер перейдіть до посилання, що відображається у списку помилок, ви помітите, що він використовує один тег (тобто < Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >
).
Змініть це так, щоб виглядати так:
.
<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 >
Якщо ваш головний проект використовує деякі бібліотечні проекти та посилаєтесь на них, ви можете викликати цю проблему, якщо ваш проект посилається на файл dll збірки, а не на проект бібліотеки, коли ви щось змінюєте в проекті бібліотеки (наприклад: перейменуйте клас).
Ви можете перевірити всі посилання на ваш головний проект, переглянувши у вікні браузера об’єктів (меню Перегляд-> Оглядач об’єктів). Посилання на файл dll завжди має номер версії. Наприклад: TestLib [1.0.0.0]
Рішення: видаліть поточне посилання вашого основного проекту на проект бібліотеки і знову додайте посилання на цей проект бібліотеки.
Спробувавши більшість рішень тут, я, нарешті, просто додав посилання на проект із проекту один раз, це змінило його на «Включити (Авто)» з «Включити», і воно, нарешті, спрацювало.
Я мав це в рішенні з 6 проектів. Один із моїх проектів посилався на названу збірку як на посилання на файл. Інші всі вказували на посилання на проект.
У цих випадках я зазвичай отримую іншу помилку.
Моє рішення полягало в тому, щоб видалити названу збірку де завгодно, на яку вона посилалась, і додати її назад. Як тільки я працював над проектом, ця проблема зникла. Перш ніж це зробити, я спробував очистити розчин, а також переконався, що жоден із проектів не був підписаний.
сподіваюся, що це комусь допоможе ...
Якщо це невідповідність залежностей залежностей, перейдіть до менеджера пакетів NuGet на рівні рішення і перевірте вкладки «Оновити та консолідувати», гармонізуйте все це.
Нещодавно я потрапив на цю проблему. У моєму випадку я маю пакети NuGet на різних складах. У мене були різні версії тих же пакетів NuGet, пов'язаних з моїми власними збірками.
Моє рішення полягало у використанні менеджера пакунків NuGet після рішення, на відміну від окремих проектів. Це дає можливість "консолідації", де ви можете оновити ваші пакети NuGet на стільки проектів, скільки хочете - тому всі вони посилаються на одну і ту ж версію збірки. Коли я робив консолідацію, провал збірки зник.
Спробуйте з оновленням-пакетом -встановити -ignoredependitions
bin
іobj
папки вашого проекту, так і створити проект заново. Іноді це працює.