c# Тип определяется в сборке, на которую нет ссылок - PullRequest
1 голос
/ 20 февраля 2020

Я работаю над проектом. net MVC5 с Microsoft.Owin 4.1. Овин не работает так, как Я думаю, что он должен , поэтому подумал, что я могу покончить с этим с помощью отладки в источнике Овин.

Шаги были:

Клонировал aspnetkatana repo
Добавил 3 пакета, на которые ссылается мой проект, в мое решение (щелкните правой кнопкой мыши решение> добавить> существующий проект)

  • Microsoft.Owin
  • Microsoft.Owin.Security
  • Microsoft.Owin.Security.Cookies

Наконец добавлены ссылки на мой проект (щелкните правой кнопкой мыши по моему проекту> добавить> ссылки)

Когда я пытаюсь построить решение, оно выдает следующие ошибки:

Тип 'IOwinContext' определяется в сборке, на которую нет ссылок. Необходимо добавить ссылку на сборку «Microsoft.Owin, версия = 3.0.1.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 '.

VS помечает строку app.CreatePerOwinContext как источник ошибки.

    public partial class Startup {

        public void ConfigureAuth(IAppBuilder app) {
            app.CreatePerOwinContext(AppUserContext.Create);
            ...

Другая ошибка жалуется на версию 4.1.0.0 с той же зависимостью (которая на самом деле является версией, которая у меня есть, так что эта довольно запутанная)

У меня вопрос, почему источник owin не рассматривается сборщиком как сборка v4.1.0.0, а также как преодолеть различные потребности в версиях в такой ситуации. Я имею в виду, что знаю, что если это произойдет с ссылками NuGet, я мог бы go с bindingredirect, но не знаю, как справиться с ситуацией с включенным источником. Это также вызывает некоторую путаницу, так как не было необходимости вводить bindingredirect, когда зависимость была включена NuGet. (см. ниже)

Sidenote: Прежде чем я начал экспериментировать с включением этих проектов в качестве источника, они были добавлены в пакеты NuGet. bindingredirect не было введено, и сборка была выполнена без каких-либо ошибок или предупреждений. (Эта часть была явно удалена из файла csproj до того, как были представлены проекты owin)

Связанная часть в .csproj

    <Reference Include="Microsoft.Owin, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.4.1.0\lib\net45\Microsoft.Owin.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Owin.Security, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.4.1.0\lib\net45\Microsoft.Owin.Security.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Owin.Security.Cookies, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Security.Cookies.4.1.0\lib\net45\Microsoft.Owin.Security.Cookies.dll</HintPath>
    </Reference>

Редактировать: И что я ищем ответ, как сказать (если возможно) строителю, который ищет временные зависимости в текущем решении. Уточнение: в моем решении через NuGet была введена пара Microsoft.AspNet.Identity. Эти пакеты зависят от Microsoft.Owin и подпакетов. Можно ли как-то сообщить сборщику, что после компиляции этих пакетов Microsoft.AspNet.Identity может их использовать?

1 Ответ

0 голосов
/ 24 февраля 2020

Для отладки зависимости вам не нужно ссылаться на проект в качестве ссылки. Вы можете открыть проекты в отдельном решении и собрать сборки отладки (DLL и PDB), а затем, если вы строите свой проект, вы можете скопировать двоичные файлы отладки и исходные карты в вашу выходную папку сборки, а затем отладить его, имея возможность пошагово просматривайте ссылки на проект.

Например, допустим, я хотел отладить AutoMapper:

enter image description here

Мой проект ссылается на Automapper пакет nuget:

enter image description here

Я строю свой проект:

enter image description here

Сборка nuget (выпуск) будет скопирована в вывод:

enter image description here

Затем замените сборки выпуска ссылки проекта на сборки отладки:

enter image description here

Теперь запустите проект с отладчиком, и вы также сможете отладить ссылку. (VS будет перезаписывать сборки nuget в каждой сборке, поэтому вам придется копировать их каждый раз).

...