C#解决方案生成工具(2)
环境 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 然后会发现没有异常了.实例化成功.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人