Проблема сборки .Net

Я использую Windows Server 2008 Enterprise + .Net 3.5 + VSTS 2008 + C # для разработки консольного приложения. Приложение отлично работает на моем рабочем столе разработчика. Но когда я запускаю то же приложение на другом компьютере (также Windows Server 2008 Enterprise, но VSTS 2008 не установлен), появляется ошибка, в которой говорится, что сборка Microsoft.Expression.Encoder не может быть найдена. По соображениям безопасности и политики я не могу установить VSTS 2008 или SDK на машину, чтобы использовать такие инструменты, как gacutil для отладки (так что какой-нибудь быстрый способ определить, правильно ли установлена ​​сборка или нет?).

У меня вопрос, где должен быть Microsoft.Expression.Encoder? В GAC или где-то еще? Я не уверен, как моя программа выглядит для Microsoft.Expression.Encoder.

Кстати: мое консольное приложение не имеет сильной подписи, и я думаю, что Microsoft.Expression.Encoder должен быть надежно подписан, верно? Если да, то где найти Microsoft.Expression.Encoder - в GAC или в локальной папке (например, в той же папке, что и консольное приложение)?


person George2    schedule 04.08.2010    source источник
comment
Это звучит так, будто это исходит от дизайнерской штуковины Expression ...   -  person leppie    schedule 04.08.2010
comment
У вас есть идеи, как (например, где и в каком порядке искать), если я буду ссылаться на эту сборку, среда выполнения найдет сборку, leppie?   -  person George2    schedule 04.08.2010


Ответы (2)


Эта сборка относится к приложению Silverlight и WPF. Если вы разрабатываете консольное приложение, вам не нужно на него ссылаться. Попробуйте проверить ссылку на сборку в проекте и удалите ненужные ссылки, которые вам не нужны, и повторите попытку.

person Fadrian Sudaman    schedule 04.08.2010
comment
Привет, мое приложение должно использовать функциональность Expression Encoder SDK, почему я должен удалить ссылку на него? Другой вопрос: если я ссылаюсь на эту сборку, как (например, где и в каком порядке искать) среда выполнения находит сборку? - person George2; 04.08.2010
comment
Из вашего вопроса было неясно, что вы действительно используете и нуждаетесь в сборке кодировщика, поэтому я сделал это предложение. В сообщении Ханса ниже есть ссылка на него, это работает? - person Fadrian Sudaman; 04.08.2010
comment
Ссылка о том, где скачать Encoder SDK. Но у меня вопрос: если я ссылаюсь на эту сборку, как (например, где и в каком порядке искать) среда выполнения находит сборку? Это общий случай того, как консольное приложение без сильной подписи находит ссылочную сборку со строгой подписью? Любые идеи? - person George2; 04.08.2010
comment
Строго подписанная сборка @George the Encoder такая же, как и все другие стандартные сборки в фреймворке, такие как System.dll, mscorlib.dll. Ваша сборка содержит манифест, содержащий метаданные о ссылках на сборки. Если он строго подписан, он сначала посмотрит GAC, в противном случае - вашу локальную папку. См. Это сообщение stackoverflow.com/questions/954257 / - person Fadrian Sudaman; 04.08.2010
comment
(1) Если он сильно подписан - это вы имеете в виду сборку кодировщика, на которую ссылаетесь в моем сценарии, правильно? (2) В общем случае, если указанная сборка является строго подписанной сборкой (например, сборка кодировщика), а мое консольное приложение, которое ссылается на сборку строгого имени, не является строго подписанной, это нормально? - person George2; 04.08.2010
comment
(1) правильно. (2) Это нормально. Вот почему я привел пример выше. Наглядный пример: если вы создаете проект консольного приложения Hello World, проект автоматически ссылается на system.dll и mscorlib.dll, и они оба строго подписаны, и, ничего не делая, вы можете выполнить программу hello world. Этим все сказано. - person Fadrian Sudaman; 04.08.2010
comment
Еще два вопроса. (1) совпадает ли DLL отладочной и релизной сборки? Например, в моей среде разработки мое консольное приложение относится к отладочной версии foo.dll, и если я заменяю (заменяю означает перезапись физического файла foo.dll) отладочную версию foo.dll для выпуска версии foo.dll, остается ли она Работа? (2) в аналогичном сценарии я не уверен, что в моей среде разработки мое консольное приложение относится к 32-разрядной версии foo.dll, и если я заменю (замените означает перезапись физического файла foo.dll) 32-разрядную версию foo.dll на 64-битную версию foo.dll, работает ли она? - person George2; 04.08.2010
comment
(1) Обычно да, если он соответствует информации ссылки сборки в манифесте и нет других зависимостей. (2) НЕТ. Вы не можете смешивать и сочетать. Ваше приложение должно быть скомпилировано и запускаться на одной и той же цели. Загрузка 64-битной dll в сборку приложения, нацеленную на 32-битную, не будет загружена из-за чтения двоичной таблицы файла сборки, наоборот. - person Fadrian Sudaman; 04.08.2010

У вас есть зависимость от компонента, который недоступен по умолчанию, вам необходимо установить его. Expression Encoder выпускается в двух версиях. Бесплатная версия доступна для загрузки из здесь. Обратите внимание на ограничения, он не поддерживает плавную потоковую передачу или кодирование в H.264. Если это проблема, перейдите по ссылке на странице загрузки для розничной версии. Простая установка Blend на машину, вероятно, тоже решит эту проблему, но это определенно будет проблемой "безопасности".

person Hans Passant    schedule 04.08.2010
comment
(1) Есть ли у вас идеи относительно того, как (например, где и в каком порядке искать), если я буду ссылаться на эту сборку, среда выполнения найдет эту сборку? (2) Я думаю, что эта сборка является строго подписанной сборкой, а мое консольное приложение не имеет строгой подписи (и ссылки на эту сборку), это нормально? - person George2; 04.08.2010
comment
Найти сборку не проблема, проблема в том, что ее нет на машине. Ничего общего со строгими именами или подписью, сборки .NET имеют строгие имена и подписаны. Это никуда не денется, пока вы не установите Expression Encoder на эту машину. - person Hans Passant; 04.08.2010