如何在Program.Main中将SetBasePath设置为dll位置

6

开始 dotnet dll

 cd /
 dotnet /tmp/donetproject/donetproject.dll

代码

.AddJsonFile("hostsettings.json", optional: true)

将会查看

/hostsettings.json

不是

/tmp/donetproject/hostsettings.json

设置GetCurrentDirectory没有效果。

.SetBasePath(Directory.GetCurrentDirectory())

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("hostsettings.json", optional: true)
            .AddCommandLine(args)
            .Build();

        return WebHost.CreateDefaultBuilder(args)
            .UseUrls()
            .UseConfiguration(config)
                .UseStartup<Startup>();
    }
}

1
你想设置程序集的位置,而不是当前工作目录的位置。话虽如此,最好将工作目录设置为程序集目录,例如 cd /tmp/donetproject/ - Christian Gollhardt
感谢。SetBasePath(AssemblyDirectory) 运作。 - Mohamed Elrashid
你能否添加答案,这样我就可以在这里接受它了。代码请参见:https://gist.github.com/Elrashid/1d8859d961b5035af66c11515db460e4 - Mohamed Elrashid
1个回答

7

您正在设置工作目录

.SetBasePath(Directory.GetCurrentDirectory())

这是开始进程的目录,使用/或更具体地说cd /。你真正想要的目录是你程序集的目录

.SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))

你应该考虑将当前工作目录切换到你的应用程序所在的目录,例如: cd /tmp/donetproject/


改变工作目录(例如cd /tmp/donetproject/)的问题在于它不方便。我经常通过将exe拖到调用完整路径的控制台窗口中来测试控制台应用程序。自动化脚本也经常使用完整路径。获取程序集的目录意味着可以从任何地方调用该应用程序。 - Louise Eggleton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接