C# 我是否可以拒绝从应用程序集属性的程序集外部访问该程序集属性?
我是否可以将程序集属性(如C# 我是否可以拒绝从应用程序集属性的程序集外部访问该程序集属性?,c#,reflection,.net-assembly,C#,Reflection,.net Assembly,我是否可以将程序集属性(如[assembly:AssemblyMetadata(“key”、“value”)])标记为private/internal,以使其只能从应用于的程序集中访问 背景: 我刚刚测试了一种通过AssemblyMetadata属性和自定义msbuild目标在代码(例如解决方案目录)中获取一些生成信息的技术,方法是将以下类添加到项目中,并将msbuild目标添加到*.csproj文件中: static class BuildEnvironment { static st
[assembly:AssemblyMetadata(“key”、“value”)]
)标记为private/internal,以使其只能从应用于的程序集中访问
背景:
我刚刚测试了一种通过AssemblyMetadata
属性和自定义msbuild目标在代码(例如解决方案目录)中获取一些生成信息的技术,方法是将以下类添加到项目中,并将msbuild目标添加到*.csproj文件中:
static class BuildEnvironment
{
static string _solutionDir;
public static string SolutionDirectory
{
get
{
if (_solutionDir == null)
_solutionDir = Initialize();
return _solutionDir;
string Initialize()
{
var metadata = typeof(BuildEnvironment).GetTypeInfo().Assembly.GetCustomAttributes<AssemblyMetadataAttribute>();
return metadata.FirstOrDefault((x) => x.Key == "SolutionDir")?.Value ?? string.Empty;
}
}
}
}
<Target Name="GenerateBuildEnvironment" BeforeTargets="CoreCompile">
<ItemGroup>
<AssemblyAttributes Include="AssemblyMetadata">
<_Parameter1>SolutionDir</_Parameter1>
<_Parameter2>$(SolutionDir)</_Parameter2>
</AssemblyAttributes>
</ItemGroup>
<WriteCodeFragment AssemblyAttributes="@(AssemblyAttributes)" Language="C#" OutputDirectory="$(IntermediateOutputPath)">
<Output TaskParameter="OutputFile" ItemName="Compile" />
</WriteCodeFragment>
</Target>
静态类构建环境
{
静态字符串_solutionDir;
公共静态字符串解决方案目录
{
得到
{
if(_solutionDir==null)
_solutionDir=Initialize();
返回_solutionDir;
字符串初始化()
{
var metadata=typeof(BuildEnvironment).GetTypeInfo().Assembly.GetCustomAttributes();
返回metadata.FirstOrDefault((x)=>x.Key==“SolutionDir”)?.Value??string.Empty;
}
}
}
}
SolutionDir
$(SolutionDir)
我是否可以将程序集属性(如[assembly:AssemblyMetadata(“key”、“value”)]
)标记为private/internal,以使其只能从应用于的程序集中访问
不需要。元数据的要点是它需要能够从.NET本身或外部工具(如Reflector或JetBrains DotPeek)中读取。根据定义,元数据是公共的。隐藏它就达不到目的
如果希望此类信息为私有信息,请不要使用.NET程序集属性。您可以将其存储为资源,并使用您喜欢的保护方法对其进行保护
我是否可以将程序集属性(如[assembly:AssemblyMetadata(“key”、“value”)]
)标记为private/internal,以使其只能从应用于的程序集中访问
不需要。元数据的要点是它需要能够从.NET本身或外部工具(如Reflector或JetBrains DotPeek)中读取。根据定义,元数据是公共的。隐藏它就达不到目的
如果希望此类信息为私有信息,请不要使用.NET程序集属性。您可以将其存储为资源,并使用您喜欢的保护方法对其进行保护