몇 가지 속성이있는 클래스가 있는데, 일부는 XML 주석 (요약)을 사용합니다. 내가하고 싶은 것은 응용 프로그램의 사용자에 대한 요약 정보를 표시하는 것입니다. 이렇게하려면 코드의 요약 텍스트에 액세스해야합니다. Label1.Text = ....... 어떻게하면됩니까? 의견이코드의 속성 요약에 액세스하는 방법은 무엇입니까?
답변
max는 매우 포괄적 인 답변을 제공했지만 필자는이 질문과 관련하여 편집 한 블로그 게시물을 추가 할 것이라고 생각했습니다. MemberInfo
의 확장 방법을 사용하여 XML 주석을 읽는 솔루션을 제공합니다. 내 구현에서는 XDocument
및 XPath 쿼리를 사용하여 텍스트를 반환합니다. 메서드, 속성, 유형, 이벤트, 필드 및 메서드 매개 변수에서 작동합니다.
는 여기를 참조하십시오 : http://www.brad-smith.info/blog/archives/220
이 불가능합니다. 말했듯이 이들은 주석이며 컴파일러에 의해 처리되지 않습니다.
그러나 자동 문서 생성에 사용할 수 있습니다. 당신이 당신의 속성을 주석하려면
은, 사용은 XML 주석이 EXE/DLL 파일을 결과에 포함되지
가당신은 당신의 코드에서 XML 주석 정보를 액세스 할 수 없습니다 컴파일되지 않기 때문에
public class MyObject
{
public int ID { get; set; }
/// <summary>
/// very very very very extensive information about the city
/// </summary>
public string City { get; set; }
public DateTime Date { get; set; }
public int Value { get; set; }
public int DiffToPrev { get; set; }
}
class Program
{
static void Main()
{
var a = new MyObject();
var t = a.GetType().GetProperty("City");
Console.WriteLine(t....................
참고 MVC 프레임 워크에 포함이 one 같은 속성, 그래서 당신은 XML 파일을 생성 할 수 있도록해야합니다 그들도 배포하십시오. 속성을 사용하여 속성/메소드/클래스/기타에 대한 런타임에 사용 가능한 정보를 제공하는 속성을 사용하는 Consder. XML 주석은 사용자가하려는 것을 위해 설계되지 않은 것일 수 있습니다.
어쨌든, XML 코멘트는 다음과 같은 형식 인 : 당신은 아직도 그것을 원한다면, 당신은 단지 접근 방법을 보여주고, 귀하의 재산 (테스트되지 않은 코드를 설명하는 XML 주석 파일을로드하고 XML 노드를 찾을 필요가 그래서
<?xml version="1.0"?>
<doc>
<assembly>
<name><!-- assembly name here --></name>
</assembly>
<members>
<!-- ... -->
<member name="M:Full.Type.Name.PropertyName">
<summary>
<!-- property summary here -->
</summary>
</member>
<!-- ... -->
</memebers>
</doc>
) :
var a = new MyObject();
var t = a.GetType().GetProperty("City");
string xmlMemberName = "M:" + a.FullName + t.Name;
var xmlDoc = new XmlDocument();
xmlDoc.Load("you_xml_comments_file.xml");
var membersNode = xmlDoc.DocumentElement["members"];
string summary = "";
if(membersNode != null)
{
foreach(XmlNode memberNode in membersNode.ChildNodes)
{
if(memberNode.Attributes["name"].Value == xmlMemberName)
{
summary = memberNode["summary"].InnerText;
break;
}
}
}
Console.WriteLine(summary);
업데이트 :이 된 .resx에 XML 주석 파일을 변환하는 작은 도구를, 그것을 배포하는 것을 잊지 않는다, 또는 쓰기 않을 것이다, 그래서 당신은 또한 포함 리소스와 같은 XML 주석 파일을 포함 할 수 있습니다 XML reso urces 파일.
포함 리소스로 XML 주석 파일을주게됩니다 :
- 디렉토리 (대신 빈/릴리스 또는 빈/디버그의) 프로젝트 프로젝트 속성에
- 세트 XML 출력 파일 경로를 XML 파일을 생성 할 수 있도록
- 프로젝트 탐색기에서
- 은 "모든 파일 표시"를 활성화하고 XML 파일을
- 열린 파일 속성을 생성 inlude 컴파일 프로젝트
XmlDocument doc; using(var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( "your_default_namespace" + "." + "your_xml_file_name.xml")) { doc.Load(stream); }
댓글을 XML 파일에서의 .resx 생성하려면 : 차 세트 빌드 작업을 "포함 리소스"
는 이제 XML 주석은이 방법을로드 할 수있는 자원으로 어셈블리 파일에 포함되어 있습니다 :
된 .resx 형식 :
<root>
<!-- some header stuff which can be copy-pasted from any other valid .resx -->
<!-- ... -->
<data name="Your_Object_Full_Name_PropertyName" xml:space="preserve">
<value><!-- summary here --></value>
</data>
<!-- ... -->
</root>
이 이
문자열을로드 할 수 있습니다 이 .resx에서 ResourceManager
클래스를 사용합니다.
일이 실제로 수행 할 수 있음을 증명합니다. XmlDocument에서 XDocument로 옮길 것을 제안 할 것이다. 코드가 훨씬 적고 LINQ를 사용하여 쿼리 할 수 있습니다. –
NDoc과 같은 문서를 생성하고 응용 프로그램에서 동일한 정보를 사용하려는 경우 이것이 유일한 방법이라고 생각합니다. 어셈블리에 ~ 200 가지 유형이있는 경우 어떻게 수행 할 것이라고 생각하십니까? – Marty
성능이 문제가되는 경우 응용 프로그램 시작시 XML 주석을 Dictionary
프로젝트 옵션에서 플래그를 검사하여 XML 문서를 생성 할 수 있습니다.
일반적인 XML 도구로 생성 된 파일을 구문 분석 할 수 있습니다.
유스 케이스에 따라 속성이 더 적합 할 수 있습니다. 그러나 귀하의 경우 그것은 쓸데없는 중복으로 이어질 것으로 보입니다.
그러나 둘 다 현지화에 다소 문제가 있습니다. 일반적으로 지역화 할 수있는 문자열은 소스가 아닌 별도의 파일에 저장해야합니다.
글쎄, 한 번에 2 마리의 토끼를 쏴 보려고합니다. 응용 프로그램의 상태 표시 줄에 대한 대화식 "힌트"또는 추가 정보를 의미하며, SandCasle 또는 Ndoc을 사용하여 응용 프로그램의 설명서를 자동으로 생성합니다. 현지화 관련 질문에 전적으로 동의합니다. 그것에 대한 아이디어가 있습니까? – Marty
스크립팅 문서를 위해 문서를 다시 사용하려고 시도하지 않는 한 (이 경우 현지화는 덜 중요합니다) 사용자와 코더의 설명서가 다를 수 있으므로 한 번에 두 마리 토끼를 쏘아도 효과가 없습니다. – CodesInChaos
- 1. ActiveDirectory에 액세스하는 코드의 단위 테스트
- 2. UniVerse 데이터베이스에서 레코드에 액세스하는 C++ 코드의 방법은 무엇입니까?
- 3. 코드의 액세스 제어 속성
- 4. ironruby에서 기본 클래스 속성 (변수)에 액세스하는 방법은 무엇입니까?
- 5. 양식에서 DataGridView에 액세스하는 방법은 무엇입니까?
- 6. AuditTrailInterceptor에서 데이터베이스에 액세스하는 방법은 무엇입니까?
- 7. Regex - HTML 코드의 속성 일치
- 8. 런타임에 코드의 레이아웃 속성 설정
- 9. 요약에 의한 MySQL 그룹
- 10. 메인 코드의 객체에 액세스하는 자바 스레드
- 11. groovy : 속성 파일에 액세스하는 방법?
- 12. json.net 배열에 액세스하는 방법은 무엇입니까?
- 13. 사전에 순차적으로 액세스하는 방법은 무엇입니까?
- 14. UIImageView에 세계적으로 액세스하는 방법은 무엇입니까?
- 15. Ajax에서 소스에 액세스하는 방법은 무엇입니까?
- 16. 이 클래스에 액세스하는 방법은 무엇입니까?
- 17. TTTableViewController의 TTTableItem에 액세스하는 방법은 무엇입니까?
- 18. AS3의 루트에 액세스하는 방법은 무엇입니까?
- 19. android에서 애셋에 액세스하는 방법은 무엇입니까?
- 20. FirstViewController에서 tabBarController에 액세스하는 방법은 무엇입니까?
- 21. GPU에 직접 액세스하는 방법은 무엇입니까?
- 22. 텍스트 필드 셀에서 NSNumberFormatter에 액세스하는 방법은 무엇입니까?
- 23. 다른 클래스의 클래스에 액세스하는 방법은 무엇입니까?
- 24. JSP에서 bean 속성에 액세스하는 방법은 무엇입니까?
- 25. 팝업 창에서 창 변수에 액세스하는 방법은 무엇입니까?
- 26. Python에서 클래스 속성에 동적으로 액세스하는 방법은 무엇입니까?
- 27. 리소스 사전에서 코드의 스타일을 얻는 방법은 무엇입니까?
- 28. Google 비디오 코드의 유효성을 검사하는 방법은 무엇입니까?
- 29. Google 코드의 만료를 설정하는 방법은 무엇입니까?
- 30. 클라이언트가 Ioncube에서 코드의 난독성을 방지하는 방법은 무엇입니까?
ASP.NET 웹 사이트에서 IIS Express를 사용하는 경우 수동으로 경로를 검색하십시오. 또한 enum을 타겟팅하는 경우 GetMember를 사용해야합니다. var path = Server.MapPath ("~/bin /"typeof (YourEnumType) .Assembly.GetName(). Name + ". xml"); var str = typeof (YourEnumType) .GetMember ("EnumMemberName") [0] .GetXmlDocumentation (path); – kape123