2

일부 서버 측 포함 기능이있는 ASP.NET 응용 프로그램이 있습니다. 내가 빌드 웹 사이트을 선택하면ASP.NET - 누락 된 #includes는 컴파일 오류를 발생시킵니다. '...'경로를 매핑하지 못했습니다.

/path-to-my-application

, 나는이 얻을 : 예를 들어 : 내 웹 사이트 가상 디렉토리에 시작하기 때문에

<!--#include virtual="/scripts.inc" --> 

이 파일은 내 ASP.NET 웹 사이트 프로젝트에 존재하지 않는 오류 :

Failed to map the path '/scripts.inc'

Visual Studio에서는 루트 디렉터리 수준에서 정의 된 이러한 포함 파일을 확인할 수 없습니다. 웹 사이트 프로젝트에는 보이지 않습니다.

수동으로 #include 참조를 주석 처리하는 것 외에도 웹 사이트를 구축 할 수있는 방법이 있습니까? Visual Studio에서 이러한 오류를 무시하고 사이트를 컴파일하도록 강제 할 수 있습니까?

웹 사이트를 IIS에 밀어 넣으면 모든 #include 파일이 있으므로 아무 문제가 없습니다.

주 - 웹 컨트롤은이 응용 프로그램에 대한 옵션이 아닙니다. #include 파일이 필요하다고 가정하십시오. 또한 다른 응용 프로그램에서 사용하므로 포함 파일을 이동할 수 없습니다.

+0

의 솔루션 탐색기 창에서 포함 항목이 프로젝트의 일부로 인식되고 있습니까? 그렇지 않은 경우 솔루션 탐색기 창의 상단에있는 "모든 파일 표시"아이콘을 클릭하십시오. 마우스 오른쪽 버튼을 클릭하고 "프로젝트에 포함"을 클릭하십시오. – TheGeekYouNeed

+0

포함 파일이 Visual Studio 프로젝트에 없습니다. 내 VS 프로젝트에는 가상 디렉터리/path-to-my-application에 배포 할 파일 만 있습니다. 위에서 언급 한 바와 같이 포함 항목이 상위 수준에 있습니다. 배포 된 웹 사이트에는 존재하지만 가상 디렉터리에는 존재하지 않습니다. – frankadelic

답변

0

포함 파일의 복사본을 만들어 개발자 컴퓨터의 솔루션에 배치 한 다음 VS에 해당 파일을 빌드 출력에 복사하지 않도록 할 수 있습니까 (빌드 동작 = 없음)?

그렇지 않은 경우 scripts.inc 파일 (http://oursite.com/scripts.inc)에 대한 전체 링크를 하드 코딩하면 어떨까요? Sucky는 문제를 해결하지만 컴파일 오류를 무시할 수는 없다는 것을 확신합니다 (경고는 그렇다).

0

~/구문을 사용하여 앱의 루트를 나타내보십시오. 예 : 이로에서 .aspx 파일에 SSI 지시어를 교체

을 :

<!--#include virtual="~/scripts.inc" --> 
+0

이것은 작동하지 않습니다 - 이것은 존재하지 않는 경로 /path-to-my-application/scripts.inc를 가리 킵니다. inc 파일은 /scripts.inc에 있습니다. – frankadelic

+0

나는 당신을 오해 할 수있다. 나는 그것이 실제로 앱의 루트에 있었기 때문에 /scripts.inc에서 찾지 못했다고 생각했습니다. 파일이 없으면 파서에 오류가 발생하지 않도록 알릴 방법이 없습니다. –

+0

이상하게 들리 네요 ... 컴파일러/파서는 /scripts.inc가 응용 프로그램 루트에 있다고 생각합니다. IIS는 /scripts.inc가 웹 루트에 있다고 생각합니다. – frankadelic

0

이 시도

<asp:Literal runat="server" id="scriptsIncLiteral" /> 

을 그리고 당신의 코드 숨김이를 넣어 :

protected override void OnPreRender(EventArgs e) 
{ 
    string scriptsFile = Request.MapPath(".") + @"..\scripts.inc"; 
    scriptsIncLiteral.Text = System.IO.File.OpenText(scriptsFile).ReadToEnd(); 
} 

당신에게 scripts.inc 파일이 둘 이상의 디렉토리에있는 경우에는 물론 ..\의 수를 변경해야합니다. 또한 ASP.NET 웹 응용 프로그램이이 파일에 액세스 할 수 있는지 확인해야합니다. 그렇지 않으면 System.UnauthorizedAccessException이 표시됩니다.

+1

그것은 매우 약한 해킹입니다. 여기 <% Response.WriteFile (는 Server.MapPath ("/Scripts.inc")) %> 더 많은 정보 것이 해킹 http://support.microsoft.com/kb/을 구현하는 더 좋은 방법 306575 – Kaerber

0

Visual Studio에서 실제 빌드 전에 프로젝트를 빌드 할 때마다 프로젝트 디렉터리에 포함 파일을 복사하도록 미리 빌드 작업을 설정할 수 있습니다. 이것은 해킹이지만.

더 정확한 방법은 두 프로젝트가있는 솔루션을 설정하는 것입니다. 하나는 웹 서버의 루트 디렉토리/프로젝트가 상호 작용하는 응용 프로그램 세트 (공유 파일 포함)를 나타냅니다. 또 다른 하나는 귀찮은 프로젝트를 나타냅니다. 그런 다음 inc 파일을 첫 번째 프로젝트에 포함시켜 두 번째 프로젝트에서 볼 수있게하고 include 할 수있게해야합니다 (ASPX의 서버 측 포함과 같이) 그들.

더 번거로운 방법이지만 상황을 훨씬 더 밀접하게 반영하고 해킹이 없으며 도로를 따라 더 멀리있는 보너스 기능을 제공 할 수 있습니다 (예 : 연결된 프로젝트의 통합/표현 용이).

관련 문제