Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Console.ReadLine()
End Sub
Обратите внимание, что объект
dreamCar
PetName
Открытие доступа к внутренним типам для других сборок
Как упоминалось ранее, внутренние (
internal
Начните с добавления в проект
CarLibrary
MyInternalClass
namespace CarLibrary
{
internal class MyInternalClass
{
}
}
На заметку! Зачем вообще открывать доступ к внутренним типам? Обычно это делается для модульного и интеграционного тестирования. Разработчики хотят иметь возможность тестировать свой код, но не обязательно открывать к нему доступ за границами сборки.
Использование атрибута assembly
Атрибуты будут более детально раскрыты в главе 17, но пока откройте файл класса
Car.cs
CarLibrary
using
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("CSharpCarClient")]
namespace CarLibrary
{
}
Атрибут
InternalsVisibleTo
На заметку! В предшествующих версиях .NET использовался файл класса
AssemblyInfо.cs
Теперь можете модифицировать проект
CSharpCarClient
Main()
var internalClassInstance = new MyInternalClass();
Код работает нормально. Затем попробуйте сделать то же самое в методе
Main()
VisualBasicCarClient
' Не скомпилируется
' Dim internalClassInstance = New MyInternalClass()
Поскольку библиотека
VisualBasicCarClient
Использование файла проекта
Еще один способ добиться того же (и можно утверждать, что он в большей степени соответствует стилю .NET Core) предусматривает применение обновленных возможностей файла проекта .NET Core.
Закомментируйте только что добавленный атрибут и откройте файл проекта
CarLibrary
ItemGroup
<ItemGroup>
<AssemblyAttribute
Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>CSharpCarClient</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Результат оказывается таким же, как в случае использования атрибута в классе, и считается более удачным решением, потому что другие разработчики будут видеть его прямо в файле проекта, а не искать повсюду в проекте.
NuGet и .NET Core
NuGet — это диспетчер пакетов для .NET и .NET Core. Он является механизмом для совместного использования программного обеспечения в формате, который воспринимается приложениями .NET Core, а также стандартным способом загрузки .NET Core и связанных инфраструктур (ASP.NET Core, EF Core и т.д.). Многие организации помещают в пакеты NuGet свои стандартные сборки, предназначенные для решения сквозных задач (наподобие ведения журнала и построения отчетов об ошибках), с целью потребления в разрабатываемых бизнес-приложениях.
Пакетирование сборок с помощью NuGet
Чтобы увидеть пакетирование в действии, понадобиться поместить библиотеку
CarLibrary
Свойства пакета NuGet доступны через окно свойств проекта. Щелкните правой кнопкой мыши на имени проекта
CarLibrary
На заметку! Все значения на вкладке Package пользовательского интерфейса Visual Studio могут быть введены в файле проекта вручную, но вы должны знать ключевые слова. Имеет смысл хотя бы раз воспользоваться Visual Studio для ввода всех значений и затем вручную редактировать файл проекта. Кроме того, все допустимые свойства описаны в документации по .NET Core.
В текущем примере кроме флажка Generate NuGet package on build (Генерировать пакет NuGet при компиляции) никаких дополнительных свойств устанавливать не нужно. Можно также модифицировать файл проекта следующим образом:
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>