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很

在 Visual Studio 上创建新的 python 项目时出错

Visual Studio 2017 针对移动开发的新特性介绍