Получение пути к файлу в сборке службы wcf - PullRequest
5 голосов
/ 30 мая 2011

У меня есть сборка, на которую ссылается служба WCF, размещенная в IIS. В сборке используются некоторые файлы XSLT, и я не понимаю, куда вывести эти файлы: создать папку в самом проекте сборки или на стороне службы WCF и как мне получить физический путь к файлу xslt в сборке?

Ответы [ 4 ]

3 голосов
/ 06 июня 2013

Поскольку службы WCF, размещенные в IIS, обычно копируют DLL во временную папку, а не содержимое проекта, который настроен на копирование в выходной файл, необходимо ссылаться на фактическую кодовую базу библиотеки DLL.

var codeBase = System.Reflection.Assembly.GetCallingAssembly().CodeBase;
                    codeBase = codeBase.Substring(8); //Remove the "file:///" prefix in front of the actual path.

var dir = codeBase.Substring(0, codeBase.LastIndexOf("/", System.StringComparison.Ordinal) + 1); //Cut out the dll file name.

var file = @"ErrorMessages.xml";

var targetPath = dir + file;
1 голос
/ 26 ноября 2013

Попробуйте использовать AppDomain.CurrentDomain.RelativeSearchPath

0 голосов
/ 26 декабря 2013

Любые файлы XSLT или XML следует размещать относительно корневой папки папки службы WCF, корневая папка может быть получена следующим образом:

if (HttpContext.Current! = Null) {// "~ /"предоставляет корневую физическую папку виртуального каталога службы WCF, которую поддерживает эта библиотека dll ..., // для примера: E: \ PhyPath \ WCFServiceFolder \ RequestPhysicalPath = HttpContext.Current.Server.MapPath (" ~ / ");}

0 голосов
/ 30 мая 2011

Поместите их в подпапку указанной сборки, отметьте их как Содержимое и включите Копировать в каталог вывода .
Затем в коде сборки, где вам нужен путь к файлу, получите путь к исполняемой сборке и добавьте в него ожидаемую подпапку, например:

var dllPath = Path.GetDirectoryName(  
    System.Reflection.Assembly.GetExecutingAssembly().Location);
var targetPath = Path.Combine(dllPath, "XsltFolder");
...