Ориентация проекта сборки на платформу x86 и x64

В моем решении есть библиотека классов, которая является надстройкой Excel. Когда я создаю решение или этот проект, я хочу, чтобы этот проект был построен сначала с ориентацией на x86 с выводом файла с именем xxx.dll, а затем с ориентацией на x64 с выводом файла с именем xxx_x64.dll.

Как мне это сделать или как отредактировать файл csproj? Спасибо.


person WPInfo    schedule 01.12.2017    source источник
comment
Вы пытаетесь решить не ту проблему. Компилятор C # генерирует MSIL, он работает на любой архитектуре. Для развертывания DLL необходимо зарегистрировать ее с помощью Regasm.exe, чтобы Excel мог найти ее обратно. Есть две версии: 32-битная и 64-битная. Если вы ничего не знаете о версии Office, установленной пользователем, просто запустите обе ее версии. Используя ту же DLL.   -  person Hans Passant    schedule 01.12.2017


Ответы (2)


Как мне это сделать или как отредактировать файл csproj?

Имя сборки xxx.dll определяется свойством AssemblyName в файле проекта. Если вы хотите изменить выходную сборку по умолчанию с именем platform, вы можете просто изменить значение этого свойства с помощью следующего кода в файле проекта .csproj:

<AssemblyName>TestWithDllWithPlatform_$(Platform)</AssemblyName>

Но с этим параметром вы получите выходную сборку с именем xxx_x86.dll при ориентации на x86.

Если вы все еще хотите настроить таргетинг на x86 с выводом файла с именем xxx.dll, а не xxx_x86.dll, вы можете попытаться переименовать файл dll с событием после сборки, когда вы нацеливаетесь на x64:

if $(Platform) == x64 (copy /y "$(TargetPath)" "$(ProjectDir)$(OutDir)$(TargetName)_$(Platform).dll")

В этом случае, когда вы нацеливаетесь на x64, выходная сборка с именем будет xxx_x64.dll:

введите здесь описание изображения

Кроме того, если вы не хотите сохранять исходный xxx_.dll, вы можете удалить его с помощью следующей команды в пост-сборке:

if $(Platform) == x64 (del "$(TargetPath)")

Надеюсь это поможет.

person Leo Liu-MSFT    schedule 01.12.2017

Наконец, я решил эту проблему, используя Shared Project в Visual Studio. Я хочу, чтобы две сборки надстройки Excel были сгенерированы путем создания решения, одна нацелена на платформу x86 или AnyCPU, другая - на платформу x64.

Вот снимок моих проектов:

введите здесь описание изображения

Все файлы кода (*. Cs) и ресурсы (изображения или файлы xml) перемещаются в общий проект, и оба других проекта имеют ссылку на него.

Что касается двух других проектов, между ними есть некоторые различия, например Название сборки и целевая платформа. Один - XXX.dll и нацелен на AnyCPU, другой - на XXX_64.dll и нацелен на x64.

При построении решения каждый из 2-х проектов выдаст соответствующую сборку.

person WPInfo    schedule 23.02.2018