특정 네임 스페이스의 모든 클래스에 속성 (난독 화 관련)을 적용해야합니다. 나는 현재 목록을 통해 일하고 있으며 손으로하고 있지만 자동으로 적용되는 방식으로 해보기를 원합니다. 이렇게하면 나에게 약간의 작업을 절약 할 수있을뿐만 아니라 미래에이 네임 스페이스에 추가 된 클래스도 특성을 갖게됩니다.네임 스페이스의 모든 구성원에게 특성을 적용 할 수 있습니까?
C#에는이 줄에 대한 규정이 있습니까?
특정 네임 스페이스의 모든 클래스에 속성 (난독 화 관련)을 적용해야합니다. 나는 현재 목록을 통해 일하고 있으며 손으로하고 있지만 자동으로 적용되는 방식으로 해보기를 원합니다. 이렇게하면 나에게 약간의 작업을 절약 할 수있을뿐만 아니라 미래에이 네임 스페이스에 추가 된 클래스도 특성을 갖게됩니다.네임 스페이스의 모든 구성원에게 특성을 적용 할 수 있습니까?
C#에는이 줄에 대한 규정이 있습니까?
.Net에서 내장 기능을 인식하지 못합니다. 그러나 Mono.Cecil
을 사용하면 쉽게 지정할 수 있습니다. 지정된 유형에 지정된 속성을 주입 할 수있는 방법입니다. 여기
private static void InjectAttribute<T>(string source,string destination,string nameSpace="")where T:Attribute
{
var assembly = AssemblyDefinition.ReadAssembly(source);
var module = assembly.MainModule;
var types = module.GetTypes();
var attributeConstructor = module.Import(typeof (T).GetConstructor(Type.EmptyTypes));
foreach (var type in types)
{
if (type.FullName.StartsWith(nameSpace))
type.CustomAttributes.Add(new CustomAttribute(attributeConstructor));
}
assembly.Write(destination);
}
및
은 샘플 인젝터 프로그램입니다 : (참고 : 세실의 형태를 해결 할 필요가 없습니다 그래서 난 내 인젝터 프로그램에서 당황 라이브러리를 참조) :private static void Main(string[] args)
{
//NOTE:obfuscatelib is already referenced to injector so no need to resolve types
InjectAttribute<ObfuscationLib.ObfuscateAttribute>(@"assembly path",
@"injected assembly path","namespace (based on full name)");
}
당신에게이 Mono.Cecil을 PM> Install-Package Mono.Cecil
Nuget 명령을 통해 얻을 수 있습니다.
멋진 walkthrough 솔루션입니다. – Disposer
네임 스페이스에 특성을 적용 할 수 없습니다. 특성을 대상으로 받아 들여야하지만 어셈블리 전체에 적용 할 수 있으며 난독 화 라이브러리는 해석 방법을 알아야합니다. 지원하지 않으면 배치 스크립트를 작성하여 프로젝트의 .cs 파일을 수정할 수도 있습니다. –
@DJKRAZE, 무엇이 목록입니다 .Contains() 메소드는 atteributes와 관련이 있습니까? –
Rahul
잘못된 링크를 게시하여 죄송합니다. [Attributes Tutorial] (http://msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx) – MethodMan