ASP.NET - отсутствует #includes, приводят к ошибкам компиляции: не удалось сопоставить путь '...' - PullRequest
2 голосов
/ 26 мая 2010

У меня есть приложение ASP.NET, которое включает некоторые функции на стороне сервера. Например:

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

Эти файлы отсутствуют в моем проекте веб-сайта ASP.NET, поскольку мой веб-сайт запускается в виртуальном каталоге:

/ пути к моему-приложению

Когда я выбираю Создать веб-сайт , я получаю эту ошибку:

Не удалось сопоставить путь '/scripts.inc'

Visual Studio не может разрешить эти включаемые файлы, которые определены на уровне корневого каталога. Они не видны в проекте сайта.

Помимо ручного комментирования ссылок #include, можно ли как-нибудь заставить сайт создать? Могу ли я заставить Visual Studio игнорировать эти ошибки и скомпилировать сайт?

Как только веб-сайт выдвинут в IIS, проблем нет, поскольку все файлы #include находятся на месте.

ПРИМЕЧАНИЕ. - Веб-элементы управления не предусмотрены для данного приложения. Пожалуйста, примите во внимание, что файлы #include являются обязательными. Также я не могу переместить включаемые файлы, так как они используются другими приложениями.

Ответы [ 4 ]

0 голосов
/ 10 июня 2010

Можете ли вы сделать копию включаемых файлов, поместить их в свое решение на своем компьютере разработчика, а затем сказать VS не копировать их при выводе сборки (Build Action = None)?

Если нет, то почему бы вам просто не жестко кодировать всю ссылку на файл scripts.inc (http://oursite.com/scripts.inc). Отвратительно, но я уверен, что вы не можете просто игнорировать ошибки компиляции ( да к предупреждениям).

0 голосов
/ 05 июня 2010

попробуйте это:

Замените директиву SSI в вашем файле .aspx следующим:

<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();
}

Вам, конечно, придется изменить количество ..\ s, если файл scripts.inc расположен более чем в одном каталоге. Вам также необходимо убедиться, что ваше веб-приложение ASP.NET имеет доступ к этому файлу, в противном случае вы получите System.UnauthorizedAccessException.

0 голосов
/ 10 июня 2010

Вы можете настроить задачу предварительной сборки в Visual Studio для копирования включаемого файла в каталог проекта каждый раз, когда проект создается до фактической сборки. Хотя это взломать.

Более правильным способом было бы создать решение с двумя проектами: один будет представлять корневой каталог вашего веб-сервера / набор приложений, с которыми взаимодействует ваш проект (посредством включения общего файла). Другой будет представлять ваш проблемный проект. Затем вы должны включить (как при включении в качестве файлов в проект) ваши файлы inc в первый проект, чтобы они были видны для второго проекта и разрешить его включение (как при включении на стороне сервера в ASPX) им.

Это способ с большими трудностями, но он гораздо точнее отражает вашу ситуацию, без взлома, и может принести вам некоторые дополнительные функции в будущем (например, более простую интеграцию / представление связанных проектов).

0 голосов
/ 03 июня 2010

Попробуйте использовать синтаксис ~ / для представления корня вашего приложения. например,

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