Visual Studio 2017 和新的 .csproj InternalsVisibleTo
Posted
技术标签:
【中文标题】Visual Studio 2017 和新的 .csproj InternalsVisibleTo【英文标题】:Visual Studio 2017 and the new .csproj InternalsVisibleTo 【发布时间】:2017-08-06 05:56:43 【问题描述】:在新的 Visual Studio 2017 .csproj 项目文件中,我应该将 AssemblyInfo 中的 InternalsVisibleTo 放在哪里?
【问题讨论】:
随便选一个。如果你想在一个名为 AssemblyInfo.cs 的文件中添加它。 但我读到 AssemblyInfo 文件在新的 VS2017 .csproj 项目文件中已过时。 不完全是,content 不再相关。这些属性现在在构建时从项目 > 属性 > 包设置中自动生成。这意味着您现在可以自己添加此文件并使用它做任何您想做的事情。如果您不想添加它,那也没关系,选择一个。 @HansPassant 您是否可以为此制定完整的答案(带有示例),或者指向一些文档?您的评论使您看起来可以将属性放入 AssemblyInfo.cs 或直接放入 csproj 项目文件中 - 但是在将属性放入 csproj 时,我无法让 Visual Studio 识别它并成功编译代码。我也找不到列出所有可用属性的完整 csproj 参考。我能找到的最好的是:msdn.microsoft.com/en-us/library/bb629394.aspx 【参考方案1】:以防万一有人想将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 中(例如,用于 Debug 配置和 .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
文件并将其应用于您的所有项目。
这应该是公认的答案,因为问题指出将 InternalsVisibleTo 添加到 .csproj 文件。
这可能很明显,但如果您将GenerateAssemblyVersionAttribute
设置为false
,这将不起作用,这可能一文不值
($MSBuildProjectName)
的替代品是 $(AssemblyName)
,如果您的项目名称与您的程序集不同。
@dashesy,这种方法没有任何改变,就像您使用了属性一样。您将需要一个 <_parameter1>BlaBla, PublicKey=Bla 用于已签名的程序集。【参考方案2】:
为了澄清 Hans Passant 上面的评论,您只需将 InternalsVisibleTo 添加到项目中的任何 cs 文件中。例如,我在项目的根目录下创建了一个 AssemblyInfo.cs 文件,然后添加了以下内容(仅):
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=<ADD_KEY_HERE>")]
【讨论】:
【参考方案3】:从 .NET 5 开始,一旦添加到您的 csproj
,这实际上就可以工作:
<ItemGroup>
<InternalsVisibleTo Include="YourProject.Tests.Unit" />
</ItemGroup>
可以在 dotnet 的 GitHub 存储库上的 this PR 上查看有关此功能的工作和讨论。
【讨论】:
以上是关于Visual Studio 2017 和新的 .csproj InternalsVisibleTo的主要内容,如果未能解决你的问题,请参考以下文章
轻松进行WPF界面开发,Visual Studio 2019主题和新的默认主题
如何在 Visual Studio 2017 项目中启用 C# 7 的所有功能?
Xamarin iOS:不打开.xib和.storyboard文件Visual Studio 2017
在Xamarin+Prism开发详解三:Visual studio 2017 RC初体验中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很