繁体   English   中英

VC ++ Visual Studio 2010程序集名称

[英]VC++ Visual Studio 2010 AssemblyName

我正在为一组项目创建一个自动构建系统。 大多数是C#和VB,但我们有一些VC ++。 在构建开始执行一些自定义内容之前,我需要为所有项目提取AssemblyName属性。 C#和VB项目在.csproj和.vbproj文件中都有一个AssemblyName元素,我可以使用xml dom来抓取它们。 .vcxproj文件中没有等价物。 仅通过查看项目文件(vcxproj)或项目中包含的文件,如何确定VC ++项目的AssemblyName是什么? 编译器是否只使用包含主入口点的任何文件作为AssemblyName?

例如Win32ConsoleApp1.cpp-> Win32ConsoleApp1.exe?

谢谢,那些元素不在我的.vcxproj中。 也许您有一个较旧的.vcproj? 无论如何,它确实导致我在导入到每个.vcxproj文件的Microsoft.Cpp.props文件中找到<TargetName />。 其中有以下行:<TargetName Condition =“'$(TargetName)'==''”> $(ProjectName)</ TargetName>

这对于检索最终将要生成的程序集的名称的目标没有好处,因为在运行时会扩展值$(ProjectName)。 因此,我开始跟踪设置了ProjectName的情况。 它位于Microsoft.Common.targets中,并设置为$(MSBuildProjectName)。 再次对我没有用,因为它在运行时也会扩展。 然后,我不得不拆解MSBuild.exe及其依赖项,最后找到Microsoft.Build.Evaluation.Evaluator类,将其设置为MSBuildProjectName。 它只是项目文件名减去扩展名。 例如MyConsoleApp1.vcxproj-> MyConsoleApp1。

我还做了一些试验,只需在Visual Studio中右键单击我的VC ++项目,然后选择“重命名”并保存该项目,便会使用输入的新值将一个新元素添加到名为<ProjectName />的项目文件中。 因此,基于所有这些,我要使用的逻辑是解析.vcxproj文件并查找<ProjectName />元素。 如果在里面,那就用它吧; 如果不是,则只需使用项目文件名减去扩展名即可。

它实际上位于.vcxproj文件中的标题<TargetName><TargetExt> 默认设置为$(ProjectName).exe (对于应用程序)。 默认情况下,该名称实际上是根据项目命名的,而不是.cpp文件。

但是,如果用户更改了此设置(在ConfigurationProperties-> General中),您将在XML中看到类似以下内容的内容:

<TargetName>$(ProjectName)</TargetName>
<TargetExt>.exe</TargetExt>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM