Почему вы устанавливаете его в GAC? Не делай этого.
Название вашего вопроса "Сборка должна быть перенесена в GAC" просто неверно.
Ничто из того, что вы написали, не подразумевает, что сборка должна быть в GAC.
РЕДАКТИРОВАТЬ - некоторая дополнительная информация.
Если вы хотите проверить зависимости, вы можете использовать Redgate Reflector для проверки сборки, например, вашего App.exe, чтобы определить, от каких других сборок она зависит и требуется. Эти зависимости будут включать номера версий.
Я не знаю инструмента из командной строки, который будет просто выдавать информацию о сборке. Может быть, есть один. Не имея этого, я написал инструмент для этого, например:
public static void Main(string[] args)
{
if ((((args == null) || (args.Length != 1)) || (args[0] == "-?")) || (args[0] == "-h"))
{
Usage();
}
else
{
try
{
Console.WriteLine(Assembly.LoadFrom(args[0]).FullName.ToString());
}
catch (Exception exception)
{
Console.WriteLine("Exception: {0}", exception.ToString());
Usage();
}
}
}
Вы можете запустить этот инструмент на App.exe, а также на x.dll, чтобы определить точное строгое имя, включая номера версий, встроенные в каждую сборку.
Это может помочь вам понять, почему все работает не так, как вы ожидаете.
Даже если в GAC есть одна версия x.dll, нет необходимости в произвольном приложении, таком как App.exe, для использования этой версии DLL. Приложение может установить в локальном каталоге свою версию dll.