CI/CD沙箱环境下.NET的Environment.GetFolderPath未遵循HOME环境变量的解决方案咨询
CI/CD沙箱环境下.NET的Environment.GetFolderPath未遵循HOME环境变量的解决方案咨询
我现在遇到一个CI/CD环境下的.NET程序问题,想请教大家怎么解决。我的构建环境把文件系统沙箱化到/tmp目录,沙箱里的程序没法访问原本的HOME目录,这里的HOME环境变量被强制设为/tmp,大部分应用都能正常适应,但依赖Environment.SpecialFolder.ApplicationData的.NET程序却出问题了。
为了测试,我写了个简单的C#控制台程序,用来打印几个特殊文件夹的路径:
Console.WriteLine("UserProfile: " + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)); Console.WriteLine("ApplicationData: " + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); Console.WriteLine("LocalApplicationData:" + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
在正常环境下执行dotnet run,输出是符合预期的:
UserProfile: /Users/mike ApplicationData: /Users/mike/Library/Application Support LocalApplicationData:/Users/mike/Library/Application Support
但当我把HOME设为/tmp(模拟CI/CD环境的情况)再运行时,结果就不对了:
mike@mac MyConsoleApp % bash bash-3.2$ export HOME=/tmp bash-3.2$ dotnet run UserProfile: /tmp ApplicationData: /Users/mike/Library/Application Support LocalApplicationData:/Users/mike/Library/Application Support
你看,UserProfile正确变成了/tmp,但ApplicationData和LocalApplicationData还是指向我原来的用户目录/Users/mike,我本来以为这些特殊文件夹应该跟着HOME环境变量走的。
我试过设置DOTNET_CLI_HOME=/tmp,但完全没用。
想请教大家,有没有不用修改C#代码的方法,能让.NET框架把ApplicationData这类特殊文件夹的路径和HOME关联起来?
备注:内容来源于stack exchange,提问作者emmby
相关产品推荐
相关产品推荐

