2017-03-14 1 views
1

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> 

Antwort

0

Kann ich eine Assembly-Attribut markieren (wie [assembly: AssemblyMetadata("key", "value")]) als private/intern zugänglich zu machen nur innerhalb der Baugruppe wird es angewendet?

No. Der Punkt der Metadaten ist, dass es von selbst .NET oder externe Tools wie Reflector oder JetBrains DotPeek lesbar sein muss. Metadaten sind per Definition public. Es zu verbergen, vereitelt den Zweck.

Wenn Sie solche Informationen privat wünschen, verwenden Sie keine .NET-Assembly-Attribute. Sie könnten es als Ressource speichern und mit Ihrer bevorzugten Schutzmethode schützen.

Verwandte Themen