Возникла исключительная ситуация при вызове метода другого проекта, на который ссылается Assembly (project.dll), который использует RuntimeInformation.IsOSPlatform - PullRequest
0 голосов
/ 02 марта 2019

Используя Visual Studio 2017, было создано 2 решения: 100 ??‍?

Решение 1 (.sln) (содержит 2 проекта)

  1. Консольный проект (.NET Core 2.1.0) //Runs perfectly on Linux and Windows
  2. Проект библиотеки классов (.NET Core 2.1.0 и .NET Framework 4.7.2) //Uses RuntimeInformation.IsOSPlatform(OSPlatform.Windows) and are Referenced by Console and MS Test Projects

Решение 2 (.sln) (содержит 1 проект)

На проект библиотеки классов решения 1 ссылается его сборка * .dll

MS Test Project (.NET Core 2.1.0) //Compiled/Published successfully; but when IsOSPlatform method of Class Library is called by this project, it throws an exception?:

Не удалось загрузить тип 'System.Runtime.InteropServices.OSPlatform' из сборки 'mscorlib, версия= 4.0.0.0, Культура = нейтральный, PublicKeyToken = b77a5c561934e089 '.

Выполнение теста

  • После публикации теста в команде clidotnet vstest mstestproject.dll было выполнено
  • Тестовый проект был запущен в Visual Studio IDE> Test Explorer

Пробовал, но не получилось:

  1. Добавлен пакет Nuget System.Runtime.InteropServices.RuntimeInformation в обоих проектах 10
  2. Поиск по всем проблемам GitHub, StackOverflow, MSDN - Не повезло ?
  3. Изменены целевые фреймворки / удалено .NET Framework 4.7.2 из библиотеки классов ?

Код из проекта библиотеки классов (решение 1.sln)

private const string CONFIG_DIR = @"Configuration";
private const string LOGFILES_DIR = @"Log Files";
public static string _ConfigDir;
public static string _LogFilesDir;
static CommonAppData()
{
    var platform = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? PlatformType.Windows : RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? PlatformType.Linux : PlatformType.Unsupported;
    var platformInfo = PlatformFactory.GetPlatform(platform);
    _ConfigDir = Path.Combine(platformInfo.ApplicationDataDirectory, CONFIG_DIR);
    _LogFilesDir = Path.Combine(platformInfo.ApplicationDataDirectory, LOGFILES_DIR);
}

Код для доступа к данным по проекту MSTestиз проекта библиотеки классов (решение 2.sln) , на который ссылается Assembly (.dll)

var ConfigurationPath = CommonAppData._ConfigDir; //Exception occurred here

[Из метаданных]

#region Assembly System.Runtime.InteropServices.RuntimeInformation, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.1.0\ref\netcoreapp2.1\System.Runtime.InteropServices.RuntimeInformation.dll
#endregion

Путь, представленный в метаданных, действителен на локальном компьютере??

Работает без каких-либо исключений:

Добавлен новый проект в качестве ссылки на проект библиотеки классов;Затем изменил ссылку сборки на ссылку проекта (Solution 2 MS Test -> Solution 1 Class Library) ?

Хотя ссылка проекта работала, но разрешена только ссылка сборки reference
Пожалуйста, предложите лучший подход / решение
Спасибо! ?

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