Я создал поставщика данных ADO.NET, который построен с использованием AnyCPU.При прямой ссылке он отлично работает как на 64, так и на 32-битной ОС Windows.Однако в моем установщике я регистрирую свой DbProviderFactory в .NET machine.config и помещаю свои сборки в GAC, чтобы пользователи могли получить доступ к поставщику данных через System.Windows.DbProviderFactories.Это прекрасно работает до тех пор, пока приложение работает как 32-разрядное.Он не работает для приложений, созданных для x64.
Это то, что я нашел.Мой установщик предназначен для 32-разрядных.Поэтому мой DbProviderFactory добавляется только в 32-разрядный .NET machine.config.Чтобы приложения x64 могли использовать мой поставщик данных через DbProviderFactories, его необходимо зарегистрировать в 64-разрядном .NET machine.config.
Нужно ли иметь два установщика?Один таргетинг 32, а другой 64?Все мои сборки являются AnyCPU (потому что я не знаю и не волнуюсь, на какой платформе находится приложение пользователя).
Мое несколько сложное решение было таким.Во время установки у меня есть пользовательское действие, которое проверяет, является ли ОС 64-битной ( здесь ).Если это так, я хочу запустить процесс, который запускает 64-битное консольное приложение, которое добавит мой DbProviderFactory в machine.config (64-битный).И мой установщик сам зарегистрируется в 32-битном файле machine.config.Я попытался, и это не удалось, так как у меня не может быть 64-битной сборки в проекте установки, который нацелен на 32-битную версию.Однако я собираюсь попытаться создать консольное приложение с использованием AnyCPU, предполагая, что оно будет работать как 64-разрядный процесс на 64-разрядных ОС.
Это довольно грязно, но я думаю это будет работать.Почему это плохая идея?И почему Microsoft говорит: «Чтобы распространять приложение .NET Framework как на 32-, так и на 64-разрядные платформы, создайте два пакета MSI, один для 32-разрядного, а другой для 64-разрядного компьютера» ( msdn ).Будет ли это работать, поскольку технически все мои сборки являются AnyCPU?
Также я использую .NET 3.5