Вопрос по visual-studio-2010 – Как изменить пространство имен по умолчанию для встроенных ресурсов с помощью MSBuild?

8

Я пытаюсь внедрить неуправляемую DLL в свой консольный проект. Пространство имен проекта по умолчаниюCompany.Project1Exe, Имя сборки (выходной файл) называетсяproject1.exe

Dll добавляются в проект с помощьюAdd as Link вариант и расположены вLibs\x86 вложенная

Company.Project1Exe
   |
   |--Program.cs
   |--Libs
       |--x86
           |-My1st.dll
           |-My2nd.dll  

Они были добавлены в проект с использованиемAdd as Link вариант, таким образом, не находятся физически вLibs вложенная папка.

Я установил действие сборки обоих этих библиотек как «встроенный ресурс».

По умолчанию MSBuild будет встраивать эти библиотеки с помощьюDefaultNamspace.ExtendedNamespace.FileName гдеExtendedNamespace представляет структуру каталогов проекта.

Это приводит к тому, что ресурс встраивается какCompany.Project1.Libs.x86.My1st.dll а такжеCompany.Project1.Libs.x86.My2nd.dll соответственно.

Я хочу, чтобы эти ресурсы были встроены с использованием имени сборки, чтобы они были встроены какProject1.Libs.x86.My1st.dll а такжеProject1.Libs.x86.My2nd.dll соответственно.

Как я могу это сделать?

Ваш Ответ

1   ответ
12

LogicalName встроенного ресурса. По умолчанию, когда вы встраиваете ресурс, вы найдете запись в вашем файле csproj, аналогичную

<EmbeddedResource Include="path to embdedded resource"/>

В случае ресурсов, которые добавляются с помощьюAdd as Link, вы найдете дополнительныйLink приписывать. В этом случаеLink Атрибут - это путь ресурса относительно структуры вашего проекта иInclude Атрибут - это указатель на местоположение файла на вашем компьютере (относительно вашего проекта).

<EmbeddedResource Include="path to embdedded resource"/>
  <Link>Libs\x86\My1st.dll</Link>
</EmbeddedResource>

Чтобы встраивать сборки с использованием другого пространства именLogicalName Атрибут может быть добавлен к вышеупомянутому, который позволяет переопределить стандартное поведение msbuild.

<EmbeddedResource Include="path to embdedded resource"/>
  <Link>Libs\x86\My1st.dll</Link>
  <LogicalName>$(TargetName).Libs.x86.My1st.dll</LogicalName>
</EmbeddedResource>

Казалось бы, недостатком является то, что это нужно делать для каждого добавленного ресурса. Однако я бы предпочел, чтобы это соглашение было установлено таким образом, чтобы это могло быть способом по умолчанию для встраивания любого ресурса в мой проект, т.е. использовать$(TargetName) в качестве замены пространства имен по умолчанию

Error: User Rate Limit Exceeded

Похожие вопросы