Опубликовать приложение Windows Forms - Куда идут изображения? - PullRequest
1 голос
/ 21 ноября 2011

Настоящий вопрос R101 по Windows Forms.

Я создал свое первое приложение Windows для печати счетов.У меня есть одно изображение, которое является логотипом компании (PNG).Приложение отлично работает в VS2010 при отладке - я поместил изображение в папку bin.

Теперь я опубликовал его и установил на другом компьютере, я получаю эту ошибку исключения:

System.IO.FileNotFoundException: ice-logo-bw.png

Итак, вопрос в том, куда мне поместить изображение, чтобы оно было добавлено при публикации?Я попытался положить его в корневую папку без удачи.

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

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

Затем вы должны установить Построить действие на этом изображении - щелкните правой кнопкой мыши, выберитеСвойства и выберите «Копировать, если новее» или «Копировать всегда».

Альтернативой является добавление его в качестве ресурса, но это означает, что вам также необходимо извлекать его из ресурсов, а не из файловой системы.

1 голос
/ 21 ноября 2011

Как уже говорили другие, вам необходимо убедиться, что при развертывании / установке приложения на другой компьютер также копируются файлы изображений - наиболее подходящим местом, вероятно, является выходной каталог вашего проекта (каталог bin/).куда идет скомпилированный .exe) - можно установить для свойства «Копировать в выходной каталог» для файлов значение «Копировать, если новее», чтобы Visual Studio сделала это автоматически для вас.

Еще один момент, который следует учитыватьэто то, как вы загружаете свои изображения - если вы используете относительные пути, то вы можете обнаружить, что ваша программа не может найти ваше изображение, даже если они присутствуют рядом с вашим исполняемым файлом, потому что рабочий каталог отличается, попробуйте запустить вашу программу из командной строки на вашеммашина разработки, чтобы увидеть, как это происходит:

:: Make sure that the current working directory is different from the one app.exe is in
C:\> path\to\my\program\app.exe

Если ваш код выглядит примерно так:

var image = LoadImage("myfile.png");

Тогда, вероятно, произойдет сбой, потому что ваша программа ищет изображение на c:\myfile.png вместо C:\path\to\my\program\app.exe.Вы должны изменить свой код так, чтобы он выглядел примерно так:


Другой альтернативой может быть использование встроенных ресурсов .Это немного сложнее, однако имеет то преимущество, что ваши изображения встроены в сам выходной файл .exe - никаких дополнительных файлов не требуется, поэтому уменьшается вероятность того, что требуемые файлы не могут быть найдены, поскольку они были удалены / перемещены / не былископировано во время установки.

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "myfile.png");
var image = LoadImage(path);
0 голосов
/ 21 ноября 2011

Это не регистр (куда вы помещаете файлы), но свойства Build Action & Copy to OutputDirectory - могут быть доступны в окне свойств (Visual Studio).После добавления файлов (изображений) в проект установите следующие свойства:

Build Action = None (depend on your application)
Copy to Output Directory  = Copy always

Ссылка на документацию здесь .

...