C#解决方案生成工具(2)

时间:2022-06-21 04:51:24

环境  VS2017 社区版 W10

Project类 : 在Microsoft.Build.Evaluation定名空间下,可使用Project类分析项目的.csproj文件

// 实例化东西,参数是项目的.csproj文件的路径

  var proj = new Project("d:/xxx/xxx.csproj");

// 挪用这个要领会更新.csproj文件.

  proj.Save()

// 如果指定路径,会生存到新路径上,用此步伐,可以使用一个.csproj模板来新生成各类项目的.csproj文件

  proj.Save(新的路径)// 将当前.csproj文件生存到新的路径,源有文件不乱革.

// 按照属性名获取属性的值,.使用这个要领获取项目的相关信息,好比项目名,项目路径

  proj.GetPropertyValue("ProjectName")// 获取项目名字

  通过打印所有属性的名值对,可以知道有哪些属性可以使用.

  proj.Properties // 显示有328个属性,几乎需要知道的属性都有.

使用过程中遇到的问题:

  在实例化一个asp.net webapi项目时,传入.csproj文件后,实例化掉败,异常显示找不到 Microsoft.WebApplication.targets 这个对象.

  对着.csproj文件查找之后,认为有三处与之关相的节点:

    <Project ToolsVersion="12.0" // 差别VS版本成立的项目差别,此外项目类型差别时也不一样.vs2017建的DLL项目值显示是15

    // 以下两个节点指示了Microsoft.WebApplication.targets引用路径,看来问题原因是找不到这个路径下的这个对象

    <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="‘$(VSToolsPath)‘ != ‘‘" />
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

  由于未成分析出节点属性意义,所以没想过改削节点属性值来解决问题.通过在本机查找Microsoft.WebApplication.targets文件,找到两个目录下有.

    // VS编译工具目录 v15

    C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0

    // VS2017COMMUNITY 编译工具目录 15

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\VisualStudio\v15.0

 第2个目录是安置VS2017的目录,第1个目录不清楚.也许这和安置VS的时候有关系.异常信息显示为找不到Microsoft.WebApplication.targets的堕落路径是第1个目录下找不到.看来编译工具默认是

  找第1个路径下的V15版本下的这种文件,然后发明没找到.因为原来就没有.

  最后解决步伐时,将第2个目录下的这个WebApplications文件夹复制到第1个目录下,但是对应的V15版本目录下.即:

  C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0  然后会发明没有异常了.实例化告成.