Зависимость ссылки проекта не копируется в выходную папку - PullRequest
1 голос
/ 01 мая 2019

До того, как это было помечено как dupe - я нашел этот вопрос и попробовал это, и это не сработало

Это все происходит в тестовых проектах, вызываемые методы вызываюттак как у них есть атрибут OneTimeSetup - не уверен, что будет доступен, но чем больше информации, тем лучше

Проект A

Ссылки - System.Collections.Immutable v 1.3.33зависимость от использования ScriptCs, но также и от непосредственного использования в коде cs proj, имеет эту запись

...... \ packages \ ScriptCs.Engine.Roslyn.0.16.1 \ lib \ net45 \ System.Collections.Immutable.dll

True <<Private>

Проект A содержит базовый класс

[SetUpFixture]
public abstract class BaseClass
{
    [OneTimeSetup]
    public void DoSomething()
    {
        var MyClass = new MyClass();
        MyClass.DoStuff();
        //etc etc
    }
}

и также содержит класс MyClass - этот класс напрямую использует типы из System.Collections.Immutable

public class MyClass
{
    private ImmutableDictionary<string,string> myImmutableDictionary = ImmutableDictionary.Create<string,string>();

    public void DoStuff()
    {
        //does things
    }
}

Проект B - Не имеет прямой ссылки на System.Immutable.Collections - Имеет ссылку на проект на Project A

В проекте B у нас есть класс, который наследуется от BaseClass в проекте B

    [SetUpFixture]
    public class SubClass : BaseClass
    {
        [OneTimeSetup]
        public void SomeMethod()
        {
            DoSomething(); //Here it goes bang

        }
    }

Таким образом, мы были предупреждены о проблеме, когда все наши тесты на сервере сборки не работали по той же причине

Не удалось загрузить файл или сборку 'System.Collections.Неизменный, Версия = 1.1.33.0, Культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a 'или одна из его зависимостей.Система не может найти указанный файл.

Я запустил это локально и получил ту же проблему.Я исследовал выходную папку для проекта B, и, к моему удивлению, она не содержала «System.Collections.Immutable.dll» - поэтому я не смог ее найти.

Мой коллега запускал их на своей машинеи тесты все же запустились, и мы посмотрели в их выходную папку Project B, и что еще более удивительно, там был файл 'System.Collections.Immutable.dll'.ОДНАКО ... это была не та версия, которая была найдена в выходной папке проекта A (1.1.33), это была версия 4.xx - я думаю, что это пришло из GAC, но из-за какой-то другой странности мы не смогли подтвердить, если они имеличто DLL в их GAC

Так что мой разум был немного взорван

Насколько я понимаю, MSBuild берет DLL из GAC в качестве последнего средства, и сначала следует использовать путь подсказки (Да, япроверил, что dll присутствует там, где указывается путь подсказки)

Итак ..

  1. Почему System.Collections.Immutable.dll не копируется из выходной папки проекта A вПроект B?
  2. Откуда взялся ад на моей машине в колледже?

Я пользуюсь Visual Studio 2019, если что-то изменится

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Поскольку в ваших проектах (судя по описанию) используется package.config, вам также необходимо явно установить пакеты NuGet, которые вы используете в проекте A, в проект B, поскольку они не передаются транзитивно.

Но: System.Collections.Immutable.dll в первую очередь не должна быть частью пакета ScriptCs.Это может быть проблема с упаковкой ScriptC.

Также: у вас могут возникнуть проблемы при создании перенаправлений привязки в тестовом проекте.Если это так, попробуйте добавить этот XML-файл в файл тестового проекта: (см. Не удалось загрузить файл или сборку Microsoft.Extensions.DependencyInjection.Abstractions, Версия = 1.1.0.0 )

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
0 голосов
/ 01 мая 2019

Почему System.Collections.Immutable.dll не копируется из выходной папки проекта A в проект B?

Может быть, вы используете зависимости построения => Зависимости проекта, вызвавшие эту проблему,Пожалуйста, выберите Добавить => Ссылка => Проекты => Решение, чтобы добавить ссылку на проект.

enter image description here

Откуда, черт возьми, приходит мой колледжmachine?

Я проверил vs2019, версия dll в projectB соответствует тому, что находится в projectA (я изменил версию пакета System.Collections.Immutable с 1.4.0 на 1.6.0 от менеджера пакетов nuget, их версии совпадают)

...