从Powershell调用的DLL使用相对于Powershell安装目录的path。 我怎样才能把它设置成别的东西?

我有一个静态方法,我从Powershell脚本调用的DLL

此静态方法执行一些任务并使用与网站共享的log4netconfigurationlogging结果–log4netconfiguration基于web.config文件,Powershell脚本使用此web.config文件,如下所示:

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $webconfigpath) 

这工作很好,log4net成功拿起configuration,看起来像这样:

 <log4net> <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> <file value="App_Data/log/process.log" /> <appendToFile value="true" /> [..] </appender> <root> <level value="DEBUG" /> <appender-ref ref="RollingFile" /> </root> </log4net> 

问题是当它试图使用相对pathApp_Data / log / process.log时 ,它使用C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \的基本path。

我如何设置这个基本path到我select的path?

我不想在web.config中使用绝对path,因为此代码需要在具有不同文件系统设置的多个不同环境中工作。

我曾尝试使用Set-Location cmdlet,但这不起作用。 我也尝试设置[Environment]::CurrentDirectory但这似乎也没有工作。 无论我改变什么,DLL代码都将使用Powershell安装目录作为其工作目录。

我的Powershell脚本如下所示:

 $webroot = "$PSScriptRoot\..\webdir"; $webconfig = "$webroot\web.config"; # Neither of these seem to set the working directory for the DLL #Set-Location $webroot #[Environment]::CurrentDirectory = $webroot [void][System.Reflection.Assembly]::LoadWithPartialName("System.Configuration") [void][System.Reflection.Assembly]::LoadFrom("$webroot\bin\Custom.Code.dll") if (!(Test-Path $webconfig)) { Throw "Aborting, could not locate web.config at $webconfig"; } [System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $webconfig) $result = [Custom.Code.Task]::Execute() Write-Host $result 

我怎样才能提供一个DLL代码作为相对基地使用的path?

我们用来解决不同环境的方法是使用环境变量 。 每个开发者都有自己的想法,他们想在什么地方记录东西,生产环境有另一套位置。

在您的具体情况下,您可以在PowerShell中使用以下环境变量:

 $env:MyLogs = "$webroot\" # or [Environment]::SetEnvironmentVariable("MyLogs","$webroot\") 

并设置您的记录器( 基于log4net文档 ):

 <file value="${MyLogs}App_Data/log/process.log" /> 

如果你不仅仅需要log4net这个变量,他们应该有自己的获取环境变量的方法。