Add-BindingRedirect в Visual Studio не изменяет файлы app.config или web.config - PullRequest
0 голосов
/ 08 апреля 2020

Я читал об этой классной Add-BindingRedirect команде в консоли диспетчера пакетов NuGet в Visual Studio, которая обновит все ваши перенаправления привязки. Это звучит потрясающе, поскольку наши перенаправления представляют собой гигантский беспорядок. Я запустил следующее:

Add-BindingRedirect *

Он выплевывает кучу вещей:

Name                  : Newtonsoft.Json
Culture               : neutral
PublicKeyToken        : 30ad4fe6b2a6aeed
ProcessorArchitecture : 
NewVersion            : 12.0.0.0
OldVersion            : 0.0.0.0-12.0.0.0
AssemblyNewVersion    : 12.0.0.0
CodeBaseHref          : 
CodeBaseVersion       : 
PublisherPolicy       : 

Name                  : Microsoft.ApplicationInsights
Culture               : neutral
PublicKeyToken        : 31bf3856ad364e35
ProcessorArchitecture : 
NewVersion            : 2.13.1.12554
OldVersion            : 0.0.0.0-2.13.1.12554
AssemblyNewVersion    : 2.13.1.12554
CodeBaseHref          : 
CodeBaseVersion       : 
PublisherPolicy       : 

Name                  : System.Memory
Culture               : neutral
PublicKeyToken        : cc7b13ffcd2ddd51
ProcessorArchitecture : 
NewVersion            : 4.0.1.1
OldVersion            : 0.0.0.0-4.0.1.1
AssemblyNewVersion    : 4.0.1.1
CodeBaseHref          : 
CodeBaseVersion       : 
PublisherPolicy       : 

Name                  : System.Numerics.Vectors
Culture               : neutral
PublicKeyToken        : b03f5f7f11d50a3a
ProcessorArchitecture : 
NewVersion            : 4.1.4.0
OldVersion            : 0.0.0.0-4.1.4.0
AssemblyNewVersion    : 4.1.4.0
CodeBaseHref          : 
CodeBaseVersion       : 
PublisherPolicy       : 

Name                  : System.Runtime.CompilerServices.Unsafe
Culture               : neutral
PublicKeyToken        : b03f5f7f11d50a3a
ProcessorArchitecture : 
NewVersion            : 4.0.5.0
OldVersion            : 0.0.0.0-4.0.5.0
AssemblyNewVersion    : 4.0.5.0
CodeBaseHref          : 
CodeBaseVersion       : 
PublisherPolicy       : 

Name                  : System.Buffers
Culture               : neutral
PublicKeyToken        : cc7b13ffcd2ddd51
ProcessorArchitecture : 
NewVersion            : 4.0.3.0
OldVersion            : 0.0.0.0-4.0.3.0
AssemblyNewVersion    : 4.0.3.0
CodeBaseHref          : 
CodeBaseVersion       : 
PublisherPolicy       : 

... Tons more

Однако он не изменяет один app.config или web.config файл. Я также попытался просто удалить все перенаправления привязки вручную, а затем запустил команду. Все еще ничего не меняет. Я использую Visual Studio 2019 16.5.3. Есть идеи о том, что я делаю неправильно, или, может быть, это не работает так, как я надеялся? Спасибо!

1 Ответ

1 голос
/ 09 апреля 2020

Add-BindingRedirect в Visual Studio не изменяет файлы app.config или web.config

Это довольно ненормальное поведение. И мне интересно, есть ли какие-то ошибки, когда вы столкнулись с этой проблемой.

С моей стороны я создаю новый проект и запускаю Add-BindingRedirect * на Package Manager Console, он может добавить связанные перенаправления привязки в app.config или web.config файлов.

Возможно, в ваших пакетах nuget есть ошибки, попробуйте выполнить следующие действия:

Шаг

1) закрыть VS Например, удалите .vs скрытую папку, bin, obj папку, а затем перезапустите проект

2) , сначала запустите восстановление nuget, щелкнув правой кнопкой мыши решение -> Восстановление пакетов Nuget в случае отсутствия некоторых пакетов Nuget, что приведет к нарушению этой командной строки.

3) отключит любые сторонние расширения с помощью Extensions -> Manage Extensions, если они влияют it.

4) open Package Manager Console -> введите следующее:

update-package -reinstall

Add-BindingRedirect *

Переустановка пакетов nuget предотвращает неправильную ссылку на пакеты nuget.

Помимо , некоторые переадресации привязки необходимо переустановить с новой версией nuget для автоматического обновления и добавления в файл.

5) создайте новый пустой проект и установите несколько пакетов nuget, чтобы проверить, связана ли проблема с Speci c проект или сам Nuget.

Кроме того , вы можете обратиться к эту ссылку для получения дополнительной информации.

---------------- Обновление 1 ---------------

Извините за этот ответ основан на на этом я не знал, что вы используете PackageReference формат управления nuget.

Я думаю, что ваше решение содержит множество проектов, и некоторые используют Packages.config, в то время как другие используют формат PackageReference.

Однако Add-BindingRedirect * относится только к проектам с packages.config. См. эту проблему на GitHub . А с форматом PackageReference он не будет добавлять или обновлять любые перенаправления привязки на app.config или web.config автоматически.

Кроме , поскольку в вашем решении есть несколько проектов, использующих формат packages.config, при использовании этой команды этот дефект в PackageReference будет перезаписан.

Чтобы доказать это, вы можете создать новый единый каркасный проект с PackageReference, и я уверен, что при вводе этой команды он не будет работать.

Как совет ,

1) вы можете добавить этот xml узел в xxxx.csproj проекта

 <PropertyGroup>
 <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
 <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

Когда вы строите свой проект, он сгенерирует новую обновленную привязку перенаправляет файл с именем <project_name>.<dll/exe> xml файл конфигурации в выходную папку.

Затем вы можете скопировать его содержимое в предыдущий файл конфигурации. (На самом деле, когда вы используете этот узел, вам не нужно делать копию, и он будет автоматически связывать перенаправления. См. this .)

2) Или просто измените PackageReference на Packages.config в вашем проекте, который может использовать эту команду без каких-либо ошибок. Но это может быть тяжелой работой. И если вам это нужно, сначала вернитесь к Package.config в Tools -> Options -> NuGet Package Manager -> Package Management, а затем вы можете использовать решение Мартина по этой ссылке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...