MSBuild托管与非托管属性



MSBuild逻辑中是否有方法可以确定我运行的是托管代码还是非托管代码?不是C++与C#,而是托管与非托管?我想根据代码是托管的还是非托管的,以不同的方式设置一些属性(通常只是版本信息)。

对于托管编译,vcxproj文件中通常有两件事会发生变化(afaik,至少在用于所有cli项目的主c++/cli属性表中是这样的:CLRSupport属性设置为true,ClCompile ItemGroup的CompileAsManaged元数据设置为true。您可以检查其中任何一个,也可以同时检查两者。下面是打印值的目标:

<Target Name="CheckManaged">
  <ItemGroup>
    <ClCompile Include="dummy.cpp" />
  </ItemGroup>
  <PropertyGroup>
    <CompileAsManaged>@(ClCompile->AnyHaveMetadataValue('CompileAsManaged','true'))</CompileAsManaged>
  </PropertyGroup>
  <Message Text="CompileAsManaged is $(CompileAsManaged) and CLRSupport is $(CLRSupport)" />
  <ItemGroup>
    <ClCompile Remove="dummy.cpp" />
  </ItemGroup>
</Target>

正如您所看到的,获取CompileAsManaged元数据值需要一些处理:我将向ClCompile组添加一个项,因为如果该组为空,则不能使用CompileAsManaged;通常你可以省略这个。

在C++中,ClCompile(源文件列表)中的每个项都有一个CompileAsManaged元数据值。设置属性很困难,因为每个源文件的属性都可能不同,但如果您只希望(并支持)关闭整个项目设置,则设置属性会更简单。在IDE中切换,看看vcxproj文件中有什么变化。它有几个不同的值可供选择。

相关内容

  • 没有找到相关文章

最新更新