dll
コマンドを使用して を作成しましたCmdlet
(Get_DemoNames.cs を参照)。これからcmdlet
メソッドを呼び出しますUpdateXml()
。これまでのところ、すべてが機能しています。ただしUpdateXml()
、ファイルが存在しない場合はファイルも作成します。UpdateXml()
このようなクラスファイルを呼び出すと:
var parser = new Parser();
parser.UpdateXml();
そして、正しいディレクトリに移動するプロジェクトを実行します。
しかし、インポートをロードしてdllをロードし、次のDemoNames
ように別のテストプロジェクトでコマンドを実行すると:
PM> Import-Module C:\projects\EF.XML\EF.XML.dll
PM> DemoNames
プログラムが間違ったディレクトリに移動し、次のエラーが発生します。
Get-DemoNames : パス 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\beheer_extern\config' へのアクセスが拒否されました。行:1 文字:10 + DemoNames <<<< + CategoryInfo : NotSpecified: (:) [Get-DemoNames], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,EF.XML.Get_DemoNames
ネットでこのエラーを検索したところ、他の人がコンストラクターに次の行を追加することで解決できたことがわかりました。
public Parser()
{
AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory);
}
これにより、別の間違ったパスが得られます。
Get-DemoNames : パス 'C:\Windows\system32\beheer_extern\config' へのアクセスが拒否されました。行:1 文字:10 + DemoNames <<<< + CategoryInfo : NotSpecified: (:) [Get-DemoNames], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,EF.XML.Get_DemoNames
Get_DemoNames.cs
namespace EF.XML
{
using System;
using System.Linq;
using System.Management.Automation;
[Cmdlet(VerbsCommon.Get, "DemoNames")]
public class Get_DemoNames : PSCmdlet
{
[Parameter(Position = 0, Mandatory = false)]
public string prefix;
protected override void ProcessRecord()
{
var names = new[] { "Chris", "Charlie", "Isaac", "Simon" };
if (string.IsNullOrEmpty(prefix))
{
WriteObject(names, true);
}
else
{
var prefixed_names = names.Select(n => prefix + n);
WriteObject(prefixed_names, true);
}
System.Diagnostics.Debug.Write("hello");
var parser = new Parser();
parser.UpdateXml();
}
}
}
パーサー.cs
public class Parser
{
public void UpdateXml()
{
var directoryInfo = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory); // www directory
var path = Path.Combine(directoryInfo.FullName, @"beheer_extern\config");
//Creates the beheer_extern\config directory if it doesn't exist, otherwise nothing happens.
Directory.CreateDirectory(path);
var instellingenFile = Path.Combine(path, "instellingen.xml");
var instellingenFileDb = Path.Combine(path, "instellingenDb.xml");
//Create instellingen.xml if not already existing
if (!File.Exists(instellingenFile))
{
using (var writer = XmlWriter.Create(instellingenFile, _writerSettings))
{
var xDoc = new XDocument(
new XElement("database", string.Empty, new XAttribute("version", 4)));
xDoc.WriteTo(writer);
}
}
}
}
プロジェクトの正しいディレクトリ (www ディレクトリ) を取得するにはどうすればよいですか?