Windows 系统以及很多应用程序会考虑使用系统的环境变量来传递一些公共的参数或者配置。Windows 资源管理器使用 %var% 来使用环境变量,那么我们能否在 Visual Studio 的项目文件中使用环境变量呢?

本文介绍如何在 csproj 文件中使用环境变量。


本文内容

  • 遇到的问题
  • 在 Visual Studio 中修改输出路径

遇到的问题

在 Windows 资源管理器中,我们可以使用 %AppData% 进入到用户的漫游路径。我正在为 希沃白板5 为互动教学而生 - 课件制作神器 编写插件,于是需要将插件放到指定目录:

%AppData%\Seewo\EasiNote5\Walterlv.Presentation

在 Windows 资源管理器中可以直接输入以上文字进入对应的目录(当然需要确保存在)。

更多关于路径的信息可以参考:UWP 中的各种文件路径(用户、缓存、漫游、安装……) - walterlv

然而,为了调试方便,我最好在 Visual Studio 中编写的时候就能直接输出到插件目录。

于是,我需要将 Visual Studio 的调试目录设置为以上目录,但是以上目录中包含环境变量 %AppData%

在 Visual Studio 中修改输出路径

如果直接在 csproj 中使用 %AppData%,那么 Visual Studio 会原封不动地创建一个这样的文件夹。

实际上,Visual Studio 是天然支持环境变量的。直接使用 MSBuild 获取属性的语法即可获取环境变量的值。

也就是说,使用 $(AppData) 即可获取到其值。在我的电脑上是 C:\Users\lvyi\AppData\Roaming

于是,在 csproj 中设置 OutputPath 即可正确输出我的插件到目标路径。

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFrameworks>net472</TargetFrameworks><OutputPath>$(AppData)\Seewo\EasiNote5\Extensions\Walterlv.Presentation</OutputPath><AppendTargetFrameworkToOutputPath>False</AppendTargetFrameworkToOutputPath></PropertyGroup>
</Project>

这里,我额外设置了 AppendTargetFrameworkToOutputPath 属性,这是避免 net472 出现在了目标输出路径中。你可以阅读我的另一篇博客了解更多关于输出路径的问题:

  • 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) - walterlv

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

在 csproj 文件中使用系统环境变量的值(示例将 dll 生成到 AppData 目录下)相关推荐

  1. CMakeList 中引用系统环境变量中的 include 文件,以及 lib 文件

    CMakeList 中引用系统环境变量中的 include 文件,以及 lib 文件. cmake中对环境变量读写都是通过ENV前缀来访问环境变量 $ENV{ZLIB_DIR} 表示系统环境变量ZLI ...

  2. Win32 C 语言程序编译多个文件和在多个文件中声明外部变量

    先看一下程序的运行结果:Win32程序,没窗口:只有WinMain入口: 工程如下:main.c使用了a.c.b.c.d.c中的函数: main.c: #include <windows.h&g ...

  3. 能否用痰盂盛饭——谈谈在头文件中定义外部变量

    能否用痰盂盛饭--谈谈在头文件中定义外部变量 - garbageMan - 博客园 能否用痰盂盛饭--谈谈在头文件中定义外部变量 "能否用痰盂盛饭"并非是一个技术问题,而是一个哲学 ...

  4. mysql 生明变量_在 MySQL 的 SQL 文件中,定义变量与使用变量

    1.现阶段存在一个新需求,需要在部署产品时,针对产品做一些初始化数据的工作.预先准备好相应的 SQL 文件.由于需要执行多条 SQL 语句,且后续的 SQL 语句依赖于之前的 SQL 语句生成的主键 ...

  5. C++中头文件中定义的变量

    1.在头文件.h中定义static变量,如: static int x;其实就等效于每个引用该头文件的源文件中,定义一个变量名为x的整型静态全局变量,每个文件中的x变量均属于本源文件,各文件中的互不相 ...

  6. php替换文件中的数据库,批量替换php文件中的class,id的值

    批量替换php文件中的class,id的值 $val="wqewq 替换成"wqewq //其实也就是在class,id值后面加上一个字符串 //我要替换的是文件里的.所以要从文件 ...

  7. wordpress上传文件报错的解决方法(413 Request Entity Too Large、超过upload_max_filesize文件中定义的php.ini值)

    报错:413 Request Entity Too Large 问题nginx是限制上传大小,解决方法如下: 打开nginx配置文件 nginx.conf, 路径一般是:/etc/nginx/ngin ...

  8. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  9. 在blk文件中找寻目标块及交易示例

    在blk文件中找寻目标块及交易示例 bitcoin所有得交易信息都以block的形式存放在文件中,存访文件名为blkxxxxx.dat,文件存放在blocks目录下.如测试网的block文件存放在te ...

最新文章

  1. 分页数据的新展示方式---瀑布流
  2. 选择 SAP Spartacus 作为 SAP Commerce Cloud Storefront 实现框架的五个理由
  3. cstring和string的区别
  4. python中分割字符串两种方法正则分组别名_Python 正则表达式(分组)
  5. ddddocr打包不成功解决办法
  6. C# in depth (第六章 实现迭代器的捷径)
  7. 读书随笔:The Book of Why——INTRODUCTION:MIND OVER DATA
  8. Intel Quick Sync Video Encoder 2
  9. 华为设备ERPS配置命令
  10. How to extract datafiles from asm diskgroup?
  11. 单片机c语言每隔1m闪烁一次,单片机c语言闪烁灯程序
  12. 已知随机变量X的协方差矩阵求去X的特征值 特征向量 PCA投影矩阵
  13. 2008年8月6号,晴,今天天气已经变热了。少壮不努力,老大徒悲伤。 —— 汉乐府古辞《长歌行》
  14. 王峰:创业就是长征,能扛才能称王
  15. Java微信公众平台开发(十二)--微信JSSDK的使用
  16. PTA.7-44 判断上三角矩阵 (15分)
  17. mysql 数据表e-r图_数据库中E-R图是如何组成的
  18. 单绞机张力开环控制(绞臂行星差速机构算法)
  19. 关于java可以解析Excel工具类(word 也可以)
  20. 如何每天自动发送心灵鸡汤、正能量语录

热门文章

  1. 【转】SSL协议、SET协议、HTTPS简介
  2. [zz]QuickTime电影(Movie)
  3. 【转载】关于文献阅读和科研选题
  4. python实现自动化查谁没交作业
  5. 固态硬盘计算机怎么自定义分区,如何将SSD固态硬盘设置为主硬盘,如何将SSD分区设置为主硬盘?...
  6. Django富文本编辑——Ckeditor的配置、使用和踩坑(应该全)
  7. 学python编程能做什么项目_十个Python练手的实战项目,学会这些Python就基本没问题了...
  8. Mac 电脑鼠标和触摸板滚动方向不一致的问题
  9. CDA数据分析师level2(模拟题考点记录)
  10. 【电路补习笔记】8、稳压电路 —— 线性电源及LDO