Где мне поместить InternalsVisibleTo из AssemblyInfo в новый файл проекта Visual Studio 2017 .csproj?
Visual Studio 2017 и новый .csproj InternalsVisibleTo
Ответы (3)
Чтобы прояснить комментарий Ханса Пассанта выше, вам просто нужно добавить InternalsVisibleTo в любой файл cs в вашем проекте. Например, я создал файл AssemblyInfo.cs в корне проекта, а затем добавил (только) следующее содержимое:
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=<ADD_KEY_HERE>")]
На всякий случай, если кто-то захочет поместить InternalsVisibleTo
в .csproj
файл вместо AssemblyInfo.cs
(возможный сценарий - иметь соглашение об именах между тестируемым проектом и тестовым проектом), вы можете сделать это следующим образом :
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Test</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
При этом будет сгенерирован следующий код
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("MyProject.Test")]
внутри автоматически сгенерированного AssemblyInfo.cs (например, для конфигурации отладки и цели .NET Standard 2.0)
/obj/Debug/netstandard2.0/MyProject.AssemblyInfo.cs
Дополнительная информация
Если вы используете .NET Core 3.1 и этот подход не работает, вам, возможно, придется явно сгенерировать информацию о сборке, добавив следующее в ваш .csproj
файл:
<PropertyGroup>
<!-- Explicitly generate Assembly Info -->
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
</PropertyGroup>
directory.build.props
файл в корне решения и применить его ко всем вашим проектам.
- person Daniel Gimenez; 27.04.2018
Microsoft.NET.GenerateAssemblyInfo.targets
файлу github.com/dotnet/sdk/blob/release/2.1/src/Tasks/
- person Ivan Zaruba; 30.10.2018
GenerateAssemblyVersionAttribute
установлено значение false
.
- person Cocowalla; 16.04.2019
($MSBuildProjectName)
является $(AssemblyName)
в случае, если имя вашего проекта отличается от вашей сборки.
- person Andy Danger Gagne; 13.05.2019
PublicKey
в этом случае?
- person dashesy; 17.12.2019
Начиная с .NET 5, это действительно работает после добавления в ваш csproj
:
<ItemGroup>
<InternalsVisibleTo Include="YourProject.Tests.Unit" />
</ItemGroup>
Работу и обсуждение этой функции можно увидеть в этом PR в репозитории dotnet GitHub.