рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрд╡реЗрджрди рдореЗрдВ "рд╕рд┐рд▓рд╛рдИ" рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреБрдЫ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдЬреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рдордп рдЬреНрдЮрд╛рдд рд╣реЛрдВрдЧреЗредC ++ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди .Net рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдВ рд╕рддреНрдп / рдЕрд╕рддреНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЙрдирдХрд╛ рд▓рдХреНрд╖реНрдп рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рд╣реИредрдХреМрди рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реИредрдкрд╣рд▓реЗ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рднрд╛рд░реА рддреЛрдкрдЦрд╛рдиреЗ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВредрдХреБрдЫ рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдкрддрд╛ рдЪрд▓рд╛ред .Net рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдВрддреНрд░ рд╣реИред рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХрдХреНрд╖рд╛рдУрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ, рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдерд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдкреВрд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЭреБрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ (.csproj) рдореЗрдВ, рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдФрд░ MSBuild рдореЗрдВ, рдЖрдк рдЧреБрдгреЛрдВ рдХреЗ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛редрдПрдХ рдирдпрд╛ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ:% mkdir Example && cd Example
% dotnet new console
рд╣рдо рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде FileAttribute.cs рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВредusing System;
namespace Example
{
[AttributeUsage(AttributeTargets.Assembly)]
public class ExampleAttribute : Attribute
{
public string Value { get; set; }
public ExampleAttribute(string value)
{
Value = value;
}
}
}
рдЕрдЧрд▓рд╛, Example.csproj рдлрд╝рд╛рдЗрд▓ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдХрдо рд╣реЛ рдЧрдИ рд╣реИред рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рддрд╛рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╕рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛред<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>Example</RootNamespace>
<ExampleValue>default</ExampleValue>
</PropertyGroup>
<ItemGroup>
<AssemblyAttribute Include="Example.ExampleAttribute">
<_Parameter1>$(ExampleValue)</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
</Project>
рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Project.cs рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛using System;
using System.Reflection;
namespace Example
{
class Program
{
static void Main(string[] args)
{
var assembly = Assembly.GetExecutingAssembly();
var attr = (ExampleAttribute) assembly.GetCustomAttribute(typeof(ExampleAttribute));
Console.WriteLine($"Assembly attribute value = '{attr.Value}'");
}
}
}
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝реЗрдВрдЧреЗ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИред% dotnet build .
% dotnet run --no-build .
Assembly attribute value = 'default'
рдФрд░ рдЕрдм рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде:% dotnet build . /p:ExampleValue="NOT DEFAULT"
% dotnet run --no-build .
Assembly attribute value = 'NOT DEFAULT'
рд╡реЛрдЗрд▓рд╛, рд▓рдХреНрд╖реНрдп рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред