Загрузка неправильных сборок на не-dev машины? - PullRequest
4 голосов
/ 23 октября 2010

Я думаю, что я попадаю в общую категорию: «Это прекрасно работает в моей среде разработки, но в любом другом месте я получаю странные результаты», и, несмотря на все мои усилия, я только более запутался.

У меня есть 2 приложения.Одним из них является приложение .NET 4 C #, а другим - (я думаю) .NET 3.5 VB.Приложение C # создает DLL, в настоящее время у меня есть версия этой DLL, скомпилированная с 3.5, чтобы я мог использовать ее в своем приложении VB.У меня есть источник для приложения VB, но не приложение C #.Я никогда не компилировал приложение C # на своем компьютере.

В этой DLL он ссылается на библиотеку на основе C.(Я чувствую, что это проблема.)

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

  • gacutil подтверждает, что DLL C # неисходящий из GAC
  • FUSLOGVW подтверждает, что полное имя C # DLL, на которое ссылается DLL, одинаково как в среде dev / non-dev
  • В моем приложении VB, так и в моем app.config,Я явно объявляю имя, токен и версию DLL C # DLL.
  • В моем приложении VB, по моей ссылке на эту DLL, у меня "Копировать локально" и "Определенная версия" установлены в False
  • Даже при копировании моей DLL на основе C и DLL C # на целевую машину, казалось бы, плохая ссылка все еще встречается.
  • Даже при новой загрузке приложений на новой системе ... проблема возникает сама по себе.

Не то, чтобы я получал какие-либо ошибки.Приложение VB по-прежнему работает нормально.Приложение VB создает и использует эту C # DLL (в которой есть C C DLL), и я вижу, что несоответствия из VB приложения, похоже, являются проблемами с C DLL.У меня никогда не было исходного кода для приложения C # на моей машине, и поэтому я понятия не имею, почему он работает хорошо сам по себе, но нигде больше.

Я чувствую, что достигКонец того, что я мало знаю об этом, и я не вижу больше никуда идти.Однако я чувствую, что смогу воссоздать рабочую среду на других машинах.

На что еще я могу посмотреть?

Редактировать

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

На этом рисунке представлены значения, возвращенные одним из методов C-DLL на моем компьютере.alt text

Все выглядит так, как должно.Затем я беру свои DLL и исполняемый файл на новую машину, запускаю ее, и эти же элементы выглядят так:

alt text

Я проверял GAC несколько раз.Я в течение нескольких часов безучастно смотрел на загруженные журналы сборок, чтобы заметить, что одни и те же (правильные) библиотеки DLL загружаются в обеих средах.Я гарантировал, что на обеих машинах установлены одинаковые обновления MS.Я удалил все сторонние библиотеки DLL из обеих сред, которые используются в проекте, и перегрузил их в обе.

На данный момент, я не имею ни малейшего представления, что является причиной этого.Там нет ошибок.Он работает так же счастливо на всех компьютерах, как и на моей, но я полностью убежден (возможно, в собственной неспособности увидеть реальную проблему), что моя машина разработки создает / имеет «что-то», что мне не удается переместить, изменитьсправка и т. д. В настоящий момент я чувствую, что исчерпал свои ограниченные знания по этому вопросу.

О, последнее, DLL были предоставлены мне из среды VS2010.Завтра у меня будет 2010 год, и я надеюсь использовать обычную DLL-библиотеку .NET 4 вместо 3.5, которую я запрашивал.В настоящее время это моя последняя надежда на исправление этой проблемы, за исключением того, что я изменил код VB.

Есть идеи?

1 Ответ

0 голосов
/ 19 января 2011

Извините, если я что-то пропустил, но вы уже подумали, что это могут быть просто настройки форматирования, а не другие результаты? Из вашего примера я вижу только одни и те же результаты, отображаемые в двух разных форматах (один с двумя фиксированными десятичными разрядами, а другой - только с соответствующими числами). Если вы проверяете в своем коде, имеет ли верхнее значение == 2.0, оно должно быть истинным на всех компьютерах, и если да, то DLL возвращает одинаковые значения на всех компьютерах, и они просто отображаются по-разному (возможно, настройки локали компьютера отличаются?) 1001 *

...