До того, как это было помечено как 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 присутствует там, где указывается путь подсказки)
Итак ..
- Почему System.Collections.Immutable.dll не копируется из выходной папки проекта A вПроект B?
- Откуда взялся ад на моей машине в колледже?
Я пользуюсь Visual Studio 2019, если что-то изменится