Visual Studio 2017 and the new .csproj InternalsVisibleTo
我在哪里将AssemblyInfo中的InternalsVisibleTo放在新的Visual Studio 2017 .csproj项目文件中?
-
在任何地方,选一个。如果你想在一个名为AssemblyInfo.cs的文件中,那么只需添加它。
-
但是我读到新的VS2017 .csproj项目文件中的AssemblyInfo文件已经过时了。
-
不完全是,内容不再相关。现在,在"构建">"属性">"包"设置的构建时自动生成属性。这意味着您现在可以自己添加此文件并随意执行任何操作。如果您不想添加它,那也没关系,选择一个。
-
我明白了,谢谢。
-
@HansPassant是否有可能为此制定完整的答案(带示例),或指向某些文档?您的注释似乎可以将属性放在AssemblyInfo.cs中或直接放在csproj项目文件中 - 但是我无法让Visual Studio识别它并在将属性放入csproj时成功编译代码。我也不能为我的生活找到一个完整的csproj参考列出所有可用的属性。我能找到的最好的是:msdn.microsoft.com/en-us/library/bb629394.aspx
万一有人想将InternalsVisibleTo放在.csproj文件而不是AssemblyInfo.cs(可能的情况是在测试项目和测试项目之间有一个命名约定),你可以这样做:
1 2 3 4 5
| <ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Test</_Parameter1>
</AssemblyAttribute>
</ItemGroup> |
拥有此代码将生成以下代码
1
| [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("MyProject.Test")] |
内部自动生成的AssemblyInfo.cs(例如,用于调试配置和.NET Standard 2.0目标)
1
| /obj/Debug/netstandard2.0/MyProject.AssemblyInfo.cs |
-
这种技术非常有用。 如果您有多个项目,则可以在解决方案根目录中使用directory.build.props文件,并将其应用于所有项目。
-
您可以链接到这种方法的官方文档吗?
-
不确定这种方法是否记录在案,因为它比常规做法更具定制性。 但是如果你想知道它是如何工作的,请参考Microsoft.NET.GenerateAssemblyInfo.targets文件github.com/dotnet/sdk/blob/release/2.1/src/Tasks/
-
这应该是接受的答案,因为问题表明将InternalsVisibleTo添加到.csproj文件中。
-
这可能是显而易见的,但是如果将GenerateAssemblyVersionAttribute设置为false,则无法实现这一点
-
如果您的项目名称与程序集不同,则($MSBuildProjectName)的替代方法是$(AssemblyName)。
-
我第二次@ julealgon对文档的请求......我似乎无法在任何地方找到关于AssemblyAttributes项目的任何官方内容:/
要澄清上面的Hans Passant的评论,您只需将InternalsVisibleTo添加到项目中的任何cs文件中。 例如,我在项目的根目录中创建了一个AssemblyInfo.cs文件,然后添加了以下内容(仅限):
1 2 3
| using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=<ADD_KEY_HERE>")] |