2008-11-03 2 views
3

Visual Studio 프로젝트에서 데이터 레이어, 비즈니스 레이어 및 프레젠테이션 레이어의 세 가지 레이어가 있습니다.XSLT 파일을 배포하고 참조하는 가장 좋은 방법

데이터 영역에는 일부 개체를 전자 메일로 변환하는 몇 가지 XSLT가 있지만 모두 잘 작동하지만 XSLT는 빌드 할 때 빌드/복사되지 않습니다.

저는 현재 배포 위치에 폴더를 만들고 거기에 XSLT를 배치했지만 수동 프로세스를 사용하여 업데이트하려고합니다.

누구에게도 비슷한 문제가 발생 했습니까? 그렇다면 어떤 문제가 발생 했습니까?

빌드 아티팩트를 필수 위치에 복사하기 위해 MSBuild 스크립트를 변경하는 경우가 있습니다. 누구에게도이 예제가 있습니까?

Thaks

답변

4

Visual Studio 2005/2008을 사용하는 경우 가장 쉬운 방법은 XSLT 파일을 프로젝트 리소스로 포함시키는 것입니다.

  1. 프로젝트의 속성을 엽니 다.
  2. 리소스 탭을 선택하십시오. "이 프로젝트에는 기본 리소스 파일이 없습니다. 여기를 클릭하여 만듭니다."라는 링크가 표시됩니다. 계속해서 클릭하십시오.
  3. 상단의 리소스 추가 드롭 다운을 클릭하고 기존 파일 추가를 선택하십시오.
  4. XSLT 파일을 찾아 선택한 다음 선택하십시오. 이 작업을 완료 한 후

, 당신은 쉽게 다음과 같은 방식으로 리소스에 액세스 할 수 있습니다 :

// To get the contents of the resource as a string: 
string xslt = global::MyNamespace.Properties.Resources.MyXsltFile; 
// To get a Stream containing the resource: 
Stream xsltStream = global::MyNamespace.Properties.Resources.ResourceManager.GetStream("MyXsltFile"); 


당신은 비주얼 스튜디오 2003을 사용하는 경우, 당신의 가장 좋은 방법으로 그 XSLT 파일을 포함하는 것입니다 DLL에 대한 임베디드 리소스 Visual Studio에서 솔루션 탐색기에서 파일을 선택하고 속성 창을 연 다음 빌드 유형을 "포함 된 리소스"로 변경합니다. 그런 다음 GetManifestResourceStream method을 사용하여 XSLT가 포함 된 스트림을 가져올 수 있습니다. 전달할 이름은 어셈블리의 기본 네임 스페이스, 파일이 들어있는 폴더 및 파일 이름을 기반으로합니다.

예를 들어, 데이터 계층 어셈블리에 My.DataLayer라는 기본 네임 스페이스가 있다고 가정 해보십시오. 데이터 계층 프로젝트에는 Transform.xslt라는 파일이 들어있는 Templates라는 폴더가 있습니다.당신의 XSLT를 얻을 수있는 코드는 다음과 같습니다

// There are numerous ways to get a reference to the Assembly ... this way works 
// when called from a class that is in your data layer. Have a look also at the 
// static methods available on the Assembly class. 
System.Reflection.Assembly assembly = (GetType()).Assembly; 
System.IO.Stream xsltStream = assembly.GetManifestResourceStream("My.DataLayer.Templates.Transform.xslt"); 

자세한 내용은 this article on CodeProject을 확인하십시오.

+0

단지 2005 년 정확한 절차에 따라 리소스를 스트림으로 가져 오는 경우 "System.InvalidOperationException : Resource 'xxx'가 스트림 호출 GetObject가 아니 었음을 알 수 있습니다. – tjmoore

0

명백한 질문 아마도,하지만 여전히 당신은 XSLT의 프로젝트 자체가 들어있는 폴더를 포함 않았다 요청해야한다? 이 앱이 웹 또는 양식 앱입니까?

0

VS에서는 빌드시 복사 할 프로젝트의 XSLT 파일 속성을 쉽게 설정할 수 있습니다. 기본적으로 그렇지 않습니다.

0

나 자신을 잘못 설명했을 수도 있습니다.

데이터 계층은 프레젠테이션 계층에서 참조하는 클래스 라이브러리입니다.

DataLayer를 구축 할 때 XSLT가 DataLayer의 Bin 디렉토리로 출력되도록 할 수 있습니다. 그러나 프리젠 테이션 계층을 빌드하고 게시 할 때 DLL을 올바르게 가져 오지만 XSLT는 가져 오지 않습니다.

관련 문제