Ahm*_*mad 8 msbuild visual-studio-2010 embedded-resource
我试图在我的控制台项目中嵌入一个非托管的DLL.项目的默认命名空间是Company.Project1Exe.程序集名称(输出exe)已命名project1.exe
使用该Add as Link选项将dll添加到项目中,并位于Libs\x86子文件夹中
Company.Project1Exe
|
|--Program.cs
|--Libs
|--x86
|-My1st.dll
|-My2nd.dll
Run Code Online (Sandbox Code Playgroud)
它们已使用该Add as Link选项添加到项目中,因此不会物理定位到Libs子文件夹中.
我已将这两个dll的Build Action设置为'Embedded Resource'.
默认情况下,MSBuild将使用表示项目目录结构的DefaultNamspace.ExtendedNamespace.FileNamewhere 来嵌入这些dll ExtendedNamespace.
这将导致资源被嵌入的Company.Project1.Libs.x86.My1st.dll和Company.Project1.Libs.x86.My2nd.dll分别.
我希望使用程序集名称嵌入这些资源,以便它们分别作为Project1.Libs.x86.My1st.dll和嵌入Project1.Libs.x86.My2nd.dll.
我怎样才能做到这一点?
Ahm*_*mad 12
解决此问题的一种方法是设置LogicalName嵌入资源.默认情况下,当您嵌入资源时,您会在csproj文件中找到类似的条目
<EmbeddedResource Include="path to embdedded resource"/>
Run Code Online (Sandbox Code Playgroud)
对于使用添加的资源Add as Link,您将找到其他Link属性.在这种情况下,Link属性是资源相对于项目结构的路径,Include属性是指向文件在计算机上的位置(相对于项目).
<EmbeddedResource Include="path to embdedded resource"/>
<Link>Libs\x86\My1st.dll</Link>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)
为了使用不同的命名空间嵌入程序集,LogicalName可以将属性添加到上面,从而允许覆盖默认的msbuild行为.
<EmbeddedResource Include="path to embdedded resource"/>
<Link>Libs\x86\My1st.dll</Link>
<LogicalName>$(TargetName).Libs.x86.My1st.dll</LogicalName>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)
它看起来的缺点是,每个添加的资源都需要这样做.但是,我希望以某种方式设置此约定,以便这可以是在我的项目中嵌入任何资源的默认方式,即使用它$(TargetName)作为默认命名空间的替代
| 归档时间: |
|
| 查看次数: |
3546 次 |
| 最近记录: |