Одна из техник, которую я часто использую, - это компилирование XSLT в мою сборку .NET в качестве ресурса манифеста. Если ваш XSLT-файл находится в Visual Studio, в свойствах файла вы можете установить «Build Action» на «Embedded Resource». Затем имя ресурса становится пространством имен проекта по умолчанию, за которым следует имя файла (я думаю .... обычно я компилирую сборку, а затем проверяю имя, просматривая манифест с ILDASM).
В любом случае - когда вы знаете имя, вы можете получить преобразование с помощью функции, подобной этой (обратите внимание, это в моей сборке утилит, следовательно, GetCallingAssembly .... в другом дизайне вы можете использовать GetExecutingAssembly):
public static XslCompiledTransform GetTransformByResourceName(string resourceName)
{
XslCompiledTransform transform = new XslCompiledTransform(false);
using (Stream manifestResourceStream =
Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName))
using (XmlTextReader reader = new XmlTextReader(manifestResourceStream))
{
XsltSettings settings = new XsltSettings(false, false);
transform.Load(reader, settings, new XmlUrlResolver());
}
return transform;
}
Конечно, в некоторых отношениях вы теряете некоторую гибкость / конфигурируемость, но по крайней мере вы знаете, что ваш код сможет найти XSLT.
Я недостаточно знаю ваш дизайн, чтобы понять, поможет ли перемещение преобразования на сервер. Даже если вам нужно выполнить преобразование на стороне клиента, если вы уже обслуживаете XML из приложения .NET, то, вероятно, тоже будет работать XSLT, но в этом случае без необходимости развертывать его отдельно в файловой системе.