Kann ich ein Assembly-Attribut (wie [assembly: AssemblyMetadata("key", "value")]
) als privat/intern markieren, damit es nur innerhalb der Assembly zugänglich ist, auf die es angewendet wird?Kann ich den Zugriff auf ein Assembly-Attribut von außerhalb der Assembly verweigern, auf die es angewendet wird?
Hintergrund: Ich habe gerade eine Technik getestet einige Build-Informationen in Code (zB die Lösung Verzeichnis) über das AssemblyMetadata
Attribut und ein benutzerdefiniertes msbuild Ziel zu erhalten, indem Sie die folgende Klasse zum Projekt und msbuild Ziel der * Hinzufügen. csproj Datei:
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>