Winform путь к корневому каталогу. Как снова! - PullRequest
2 голосов
/ 13 мая 2009

Привет, ребята, прежде всего, извинитесь за то, что задали такой простой и все же излишний вопрос, но, похоже, мой случай несколько отличается, когда поиск в Google не дал ответов. У меня есть решение с 2 проектами, скажем, proj1 и proj2, где proj1 - это приложение winform, а proj2 - это приложение для библиотек классов. Здесь сидит proj1

C: \ Documents and Settings \ myname \ Мои документы \ Visual Studio 2005 \ Projects \ proj1 \ proj1

и вот библиотека здесь

C: \ Documents and Settings \ myname \ Мои документы \ Visual Studio 2005 \ Projects \ proj1 \ proj2

Теперь у меня есть отчет в подпапке Report, где у меня есть мой crystalreport и другие материалы. мне нужно иметь этот корневой путь proj1

C: \ Documents and Settings \ myname \ Мои документы \ Visual Studio 2005 \ Projects \ proj1 \ proj1

так что я добавляю @"Report\myreport.rpt" к нему. Я полагаю, что на развернутом компьютере это должен быть относительный путь. Если я ошибаюсь, исправьте меня. Основная идея - указать относительный путь к папке отчета в

C: \ Documents and Settings \ myname \ Мои документы \ Visual Studio 2005 \ Projects \ proj1 \ proj \ Report.

из всех, что я искал онлайн как Environment.CurrentDirectory или Application.StartupPath, или Application.ExecutablePath, или System.Reflection.Assembly.GetExecutingAssembly().Location, только что мне дали либо bin / proj1.exe, либо папку отладки. я просто не могу понять, как это сделать

спасибо, что прочитали это. О да! и за твой добрый ответ. PS: используя C # 2.0

Ответы [ 4 ]

4 голосов
/ 13 мая 2009

Вам просто нужно установить для свойства «Копировать в выходной каталог» файла отчета значение «Копировать всегда» или «Копировать, если новее». Это скопирует отчет ниже фактического выходного каталога во время сборки, и вы можете получить к нему доступ с помощью Path.Combine(Application.StartupPath, "Reports", "report.rpt").

3 голосов
/ 13 мая 2009

Вы не получите папку project из скомпилированной сборки, потому что (насколько я знаю) она понятия не имеет, откуда она была скомпилирована. Однако вы получите папку , в которой выполняется сборка, из , то есть «папку отладки», которую вы получаете из Application.ExecutablePath.

Было бы лучше скопировать отчеты в папку «Отчеты» в папку bin / debug и получить к ней доступ оттуда (вы можете использовать Application.ExecutablePath, чтобы получить это). Затем, когда вам нужно переместить скомпилированные файлы, вы можете переместить папку отчетов вместе с ней.

При развертывании у вас будет следующая структура:

C:\Program Files\proj1\proj1.exe
C:\Program Files\proj1\Reports\myreport.rpt

, а не следующее (что вы предлагаете?):

C:\Program Files\proj1\proj1.exe
C:\Documents and Settings\myname\My Documents\Visual Studio 2005\Projects\proj1\Reports\myreport.rpt
2 голосов
/ 14 мая 2015
string path =new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName
2 голосов
/ 13 мая 2009

Я думаю, что самый безопасный способ найти, в какой папке находится ваша сборка, это:

private static string GetAppFolder()
{
    return new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName;
}

... и с помощью этой функции вы можете получить путь к отчету:

Path.Combine(GetAppFolder(), @"Report\myreport.rpt")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...