ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Roslyn 解决找不到 SolutionDir 属性

2021-06-30 10:07:47  阅读:272  来源: 互联网

标签:SolutionDir 文件 csproj sln 文件夹 Roslyn 属性


在旧版本的 csproj 格式也就是 Franken-proj 格式,可以使用 SolutionDir 拿到当前sln文件所在的文件夹,但是在 SDK Style 格式的项目文件,是拿不到这个属性的,本文告诉大家如何做到兼容之前的逻辑

其实不是 SDK Style 拿不到 SolutionDir 属性,而是因为没有使用 sln 加入构建

如我在一个项目里面的 csproj 文件添加下面代码

  <Target Name="KofegaheqallwhikaDalbedalkihi" AfterTargets="BeforeBuild">
    <Warning Text="Solution $(SolutionDir)"/>
  </Target>

如果我使用 dotnet 命令构建这个 csproj 文件,那么将会输出如下代码

 warning : Solution *Undefined*

如果我使用 dotnet 命令构建 sln 文件,那么可以输出 sln 所在的文件夹

这就是不同点

但是如果我只是想通过 dotnet 或 msbuild 命令构建 csproj 文件,而不构建 sln 文件,此时还需要使用 SolutionDir 属性。那么请在 sln 文件夹添加一个叫 Directory.Build.props 文件,这个文件可以设置这个文件夹里面的所有项目的构建

而 $(SolutionDir) 属性的含义也就是一个属性,因此只需要返回当前 sln 所在文件夹就可以

<Project>
  <PropertyGroup>
    <SolutionDir>$(MSBuildThisFileDirectory)</PackageOutputPath>
  </PropertyGroup>
</Project>

上面代码的 $(MSBuildThisFileDirectory) 就是获取当前文件所在的文件夹,而当前文件是放在和 sln 文件相同的文件夹,因此这个就是和 SolutionDir 等价

如果小伙伴不知道 Directory.Build.props 文件可以如何写,还请小伙伴看我的 github 仓库

关于 Directory.Build.props 文件 的作用请看 Roslyn 使用 Directory.Build.props 文件定义编译

关于 MSBuildThisFileDirectory 等默认变量请看 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv

更多编译相关博客请看 手把手教你写 Roslyn 修改编译

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。

如果在博客看到有任何不懂的,欢迎交流

标签:SolutionDir,文件,csproj,sln,文件夹,Roslyn,属性
来源: https://blog.51cto.com/u_11283245/2956338

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有