코드가있는 어셈블리의 경로는 어떻게 얻습니까?


781

현재 코드가있는 어셈블리의 경로를 얻는 방법이 있습니까? 호출 어셈블리의 경로를 원하지 않고 코드를 포함하는 경로 만 원합니다.

기본적으로 단위 테스트는 dll과 관련된 xml 테스트 파일을 읽어야합니다. 테스트 dll이 TestDriven.NET, MbUnit GUI 또는 기타에서 실행되는지 여부에 관계없이 항상 경로가 올바르게 해결되기를 원합니다.

편집 : 사람들은 내가 요구하는 것을 오해하는 것 같습니다.

내 테스트 라이브러리는

C : \ projects \ myapplication \ daotests \ bin \ Debug \ daotests.dll

이 길을 가고 싶습니다 :

C : \ 프로젝트 \ myapplication \ daotests \ bin \ 디버그 \

MbUnit Gui에서 실행할 때 지금까지 세 가지 제안이 실패합니다.

  • Environment.CurrentDirectory 제공 \ 프로그램 파일 \ MbUnit에 C :

  • System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location 제공 \ 문서 및 설정 \ 조지 \ 로컬 설정 \ 임시 \ .... \ DaoTests.dll : C

  • System.Reflection.Assembly.GetExecutingAssembly().Location 이전과 동일합니다.


102
이것이 당신의 해결책입니다 : var dir = AppDomain.CurrentDomain.BaseDirectory;
Jalal El-Shaer

7
이것이 허용되는 솔루션이어야합니다. AppDomain.CurrentDomain.BaseDirectory가 올바른 방법입니다.
aBetterGamer 2016 년

관련 참조 : find-my-
main-

2
나는 pacakge 디렉토리에서 JSON 파일을 읽는 너겟 패키지에 대한 솔루션을 찾고 여기에 왔습니다. 너겟 패키지가 실행될 때 "AppDomain.CurrentDomain.BaseDirectory"는 너겟 패키지 디렉토리가 아니라 실행중인 프로젝트 디렉토리를 가리키는 것으로 보인다. 이들 중 어느 것도 너겟 패키지 디렉토리를 올바르게 목표로하는 것 같지 않습니다.
Lucas

@Lucas 아니오 그것은이 질문에 관한 것이 아니기 때문에 아닙니다. (실제로 질문을 받았을 때, nuget이 존재하지 않았습니다)-새로운 질문을 시작하고 저를 ping하십시오. 그러나 지금 당신에게 말할 수 있습니다. 대부분의 경우 불가능합니다. 대부분의 프로젝트에서 너겟 디렉토리는 packagessln 파일 옆에 있습니다. 그러나 컴파일하고 배포 할 때 sln 파일과 패키지 디렉토리가 없습니다. 컴파일하는 동안 필요한 것 (모두는 아님)이 bin 디렉토리에 복사됩니다. 가장 좋은 방법은 포스트 빌드 스크립트를 사용하여 원하는 파일을 복사하는 것입니다.
George Mauer

답변:


1036

단위 테스트에서이 속성을 자주 사용하므로 다음 속성을 정의했습니다.

public static string AssemblyDirectory
{
    get
    {
        string codeBase = Assembly.GetExecutingAssembly().CodeBase;
        UriBuilder uri = new UriBuilder(codeBase);
        string path = Uri.UnescapeDataString(uri.Path);
        return Path.GetDirectoryName(path);
    }
}

Assembly.Location(어셈블리는 임시 폴더에서 실행) NUnit과를 사용하는 경우 속성은 가끔 사용하는 것을 선호하므로, 몇 가지 재미있는 결과를 제공합니다 CodeBase당신에게 URI 형식으로 경로를 제공하고 UriBuild.UnescapeDataString을 제거 File://처음에, 그리고 GetDirectoryName일반적인 윈도우 형식으로 변경 .


29
디렉토리 이름이 c : \ My % 20Directory 인 경우 Uri.UnescapeDataString은 다음을 반환합니다. c : \ My Directory 이는 File.Exists ( "c : \ My Directory \ MyFile.txt ")는 올바른 경로가 실제로"c : \ My % 20Directory \ MyFile.txt "이므로 false를 반환합니다. SVN 경로에 공백이 있고 체크 아웃하면 공백을 인코딩 하므로이 문제가 발생했습니다.
row1

5
이 메소드를 사용하여 File.Exist ()를 확인할 때이 메소드는 UNC 경로에서 false를 리턴하므로주의하십시오. @Keith의 대답을 대신 사용하십시오.
AZ.

3
공개하기 전에 정적 인 것을 넣을 수 있다는 것을 몰랐습니다. 알아
두면 좋으며

5
참고 : 네트워크 위치에서는 작동하지 않습니다 (예 : \\ REMOT_EPC \ Folder)
Muxa

5
또한 디렉토리에 숫자 기호 '#'이 있으면 작동하지 않습니다. Windows의 디렉토리 및 파일 이름에는 숫자 기호가 허용됩니다.
Huemac

321

도움이 되나요?

//get the full location of the assembly with DaoTests in it
string fullPath = System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location;

//get the folder that's in
string theDirectory = Path.GetDirectoryName( fullPath );

내 편집 내용을 참조하십시오. 그렇지 않습니다 .MbUnit이 어떻게 작동하는지 이상한 것입니까?
George Mauer

3
xml 파일을 컨텐츠로 설정하고 dll 또는 리소스와 함께 dll에서 읽습니다.
Keith

22
아니면 그냥typeof(DaoTests).Assembly
SLaks

4
@SLaks @JohnySkovdal @Keith : 안녕하세요, 여러분 Assembly.GetExecutingAssembly(). 이것은 "현재 실행되는 코드를 포함하는 어셈블리 얻는다" (방법을 설명으로부터). 내 AddIn " EntitiesToDTOs " 에서 이것을 사용합니다 . 실제 예는 AssemblyHelper.cs 를 참조하십시오 .
kzfabi 2016 년

4
@John Silby가 UNC 경로에서 작동하지 않는 것처럼 보이기 때문에 게시물에 문제가 있습니다 (예 : \\ Server \ Folder \ File.ext). 이것은 트릭을 수행했습니다. +1
블루 베리

312

다음과 같이 간단합니다.

var dir = AppDomain.CurrentDomain.BaseDirectory;

11
이것이 허용되는 솔루션이어야합니다. AppDomain.CurrentDomain.BaseDirectory가 올바른 방법입니다.
aBetterGamer 2016 년

5
이 문제에 대해 다시 한 번 관심을 가져 주셔서 감사합니다. 질문을했을 당시에 사용 가능한지 확실하지 않지만 지금은 가능합니다.
George Mauer

120
아니요, 잘못되었습니다. 현재 실행중인 코드가 아닌 ORIGINAL ENTRY POINT의 경로를 반환합니다. 다른 경로에서 수동으로 어셈블리를로드했거나 GAC에서로드 한 경우 잘못된 결과가 반환됩니다. 이 답변은 맞습니다 : stackoverflow.com/a/283917/243557 Quicker still is Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).
nathanchere

9
실제로 이것은 웹 응용 프로그램에서는 작동하지 않지만 모든 유형의 응용 프로그램에서 다음과 같은 기능 보강이 작동한다는 것을 알았습니다.AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory
Ilya Chernomordik

4
테스트 어셈블리의 원래 bin 경로를 가져 오려는 경우 (예 : 하위 폴더의 보조 데이터 파일에 도달하려는 경우) 단위 테스트에 적합합니다. 테스트 어셈블리는 코드의 진입 점입니다.
MarioDS

68

John의 대답과 동일하지만 약간 덜 장황한 확장 방법입니다.

public static string GetDirectoryPath(this Assembly assembly)
{
    string filePath = new Uri(assembly.CodeBase).LocalPath;
    return Path.GetDirectoryName(filePath);            
}

이제 할 수있는 일 :

var localDir = Assembly.GetExecutingAssembly().GetDirectoryPath();

또는 원하는 경우 :

var localDir = typeof(DaoTests).Assembly.GetDirectoryPath();

6
당신은 assembly대신에 의미 했습니까 Assembly.GetExecutingAssembly()?
Dude Pascalou

3
Dude가 지적한 것처럼, 당신은 인수를 전달하고 그것을 사용하지 못했습니다.
Chris Moschini

4
이 답변은 당면한 질문에 대한 명백한 잘못입니다. 이 답변의 수정 된 버전은 주어진 어셈블리의 경로를 제공 할 수 있습니다. 그러나 여기서는 실행 어셈블리를 구체적으로 찾고 있으므로 어셈블리 전달은 의미가 없습니다. 확장 방법은 작업에 잘못된 도구입니다.
Edward Brey

46

CodeBase 및 UNC 네트워크 공유를 사용할 때 나를 위해 일한 유일한 솔루션은 다음과 같습니다.

System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath);

일반 URI에서도 작동합니다.


5
이것이 정답입니다. 기본 코드베이스가 UNC 공유를 올바르게 처리하지 못한다는 것은 정말 성가신 일입니다.
Daniel Gilbert

폴더에 공백이 있고 신이 다른 문자를 알면 충돌이 발생합니다.
MarioDS

1
나는이 많이 사용하고 발견 한 하나의 실패 어디 시나리오 : 코드 자체의이 행이 다음 응용 프로그램에서 사용하는 NuGet 패키지의 일부인 경우! 로 교체 GetExecutingAssembly()하여 해당 시나리오도 지원할 수 있습니다 GetCallingAssembly().
Timo

@Timo :이 변경에 부작용이 있는지 확인 했습니까? 그렇다면 수정 사항을 포함하도록 답변을 편집하십시오.
Ignacio Soler Garcia

@IgnacioSolerGarcia 슬프게도 한 계층 깊이에서만 작동한다고보고해야합니다. 즉, NuGet 패키지가 다른 NuGet 패키지에 의해 호출되면 실패합니다! 나는 이것을 이것을 사용하고있다 (Chernomordik 의이 페이지의 주석에서) : AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory. 첫 번째 부분은 웹 응용 프로그램을위한 것이고 두 번째 부분은 다른 응용 프로그램을위한 것입니다.
Timo

32

어셈블리가 섀도 복사 되지 않는 한 작동합니다 .

string path = System.Reflection.Assembly.GetExecutingAssembly().Location

14

이건 어때?

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

11

여기서 실제 문제는 테스트 러너가 어셈블리를 다른 위치로 복사하는 것입니다. 런타임에 어셈블리가 어디에서 복사되었는지 알 수있는 방법은 없지만 테스트 러너에게 어셈블리를 현재 위치에서 실행하고 그림자 디렉토리로 복사하지 않도록 스위치를 전환 할 수 있습니다.

물론 이러한 스위치는 테스트 러너마다 다를 수 있습니다.

XML 데이터를 테스트 어셈블리 내에 리소스로 포함시키는 것을 고려 했습니까?


섀도 복사 문제를 지적하면 +1 그러나에서에서 원래 위치를 확인할 수 있습니다 Assembly.CodeBase.
tm1

11
AppDomain.CurrentDomain.BaseDirectory

MbUnit GUI와 함께 작동합니다.


이것은 asp.net 웹 앱에서 루트 디렉토리에 상대적인 파일을 작성하는 데
효과적이었습니다

나는 이것이 가장 일반적으로 작동한다는 것을 알았습니다. 확실하지 않은 경우 선택하십시오.
Erik Bergstedt

10

나는 이것이 모든 종류의 응용 프로그램에서 작동 할 것이라고 믿습니다.

AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory

1
필자의 실험은 웹 및 콘솔 응용 프로그램뿐만 아니라 단위 테스트 및 NuGet 패키지 (모든 수준의 재귀로 인한 호출)를 다루는 가장 확실한 대답임을 보여줍니다.
Timo

8

내가 알 수있는 한, 다른 답변의 대부분에는 몇 가지 문제가 있습니다.

웹 기반이 아닌 디스크 기반 (GAC 기반이 아닌) 어셈블리대해이 작업을 수행하는 올바른 방법 은 현재 실행중인 어셈블리의 CodeBase속성 을 사용하는 것 입니다.

URL ( file://)을 반환합니다 . 문자열 조작 이나 으로 엉망이되는 대신의 속성을 UnescapeDataString활용하여 최소한 의 혼란 으로 변환 할 수 있습니다 .LocalPathUri

var codeBaseUrl = Assembly.GetExecutingAssembly().CodeBase;
var filePathToCodeBase = new Uri(codeBaseUrl).LocalPath;
var directoryPath = Path.GetDirectoryName(filePathToCodeBase);

1
경로가 포함 된 경우 작동하지 않습니다 #( EscapedCodeBase작품,하지만 경로가 포함되어있는 경우 EscapedCodeBase 일을하지 않는 예를 들어, %20축 어적 (이는 윈도우 경로에 허용되는 문자 순서)
마틴 바

이 코드를 NuGet 패키지에 포함 시키려면로 대체 GetExecutingAssembly()하여 해당 시나리오를 수정할 수 있습니다 GetCallingAssembly().
Timo

8

이건 어때요 ...

string ThisdllDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

그런 다음 필요없는 것을 해킹하십시오.


7
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var assemblyPath = assembly.GetFiles()[0].Name;
var assemblyDir = System.IO.Path.GetDirectoryName(assemblyPath);

7

다음은 John Sibly 코드의 VB.NET 포트입니다. Visual Basic은 대소 문자를 구분하지 않으므로 변수 이름 두 개가 형식 이름과 충돌했습니다.

Public Shared ReadOnly Property AssemblyDirectory() As String
    Get
        Dim codeBase As String = Assembly.GetExecutingAssembly().CodeBase
        Dim uriBuilder As New UriBuilder(codeBase)
        Dim assemblyPath As String = Uri.UnescapeDataString(uriBuilder.Path)
        Return Path.GetDirectoryName(assemblyPath)
    End Get
End Property

6

이 세월 동안 아무도 실제로 이것을 언급하지 않았습니다. 내가 멋진 ApprovalTests 프로젝트 에서 배운 트릭 . 비결은 어셈블리의 디버깅 정보를 사용하여 원래 디렉토리를 찾는 것입니다.

RELEASE 모드 나 최적화가 활성화 된 상태 또는 컴파일 된 컴퓨터와 다른 컴퓨터에서는 작동하지 않습니다.

그러나 이것은 당신이 그것을 호출하는 소스 코드 파일의 위치에 상대적인 경로를 얻을 것입니다

public static class PathUtilities
{
    public static string GetAdjacentFile(string relativePath)
    {
        return GetDirectoryForCaller(1) + relativePath;
    }
    public static string GetDirectoryForCaller()
    {
        return GetDirectoryForCaller(1);
    }


    public static string GetDirectoryForCaller(int callerStackDepth)
    {
        var stackFrame = new StackTrace(true).GetFrame(callerStackDepth + 1);
        return GetDirectoryForStackFrame(stackFrame);
    }

    public static string GetDirectoryForStackFrame(StackFrame stackFrame)
    {
        return new FileInfo(stackFrame.GetFileName()).Directory.FullName + Path.DirectorySeparatorChar;
    }
}

5

존재하는 현재 디렉토리.

Environment.CurrentDirectory;  // This is the current directory of your application

빌드와 함께 .xml 파일을 복사하면 찾을 수 있습니다.

또는

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(SomeObject));

// The location of the Assembly
assembly.Location;

어셈블리를 섀도 복사 한 경우 문제가됩니다 .
쓰셨

+1520! Environment.CurrentDirectoryMSBuild 작업 클래스에서 리플렉션을 사용하는 경우 실행 어셈블리가 GAC에 있고 코드가 다른 곳에 있습니다.
vulcan raven

4
일반적으로 CurrentDirectory는 실행 파일이 어디에 있는지 알려주지 않습니다. 그것은 그것이 사용되는 것이 아닙니다. 실행 파일이있는 위치와 동일한 위치에있는 경우가 많으므로 많은 프로그래머가 그 차이를 이해하지 못합니다. 그런 다음 응용 프로그램이 CurrentDirectory의 올바른 사용을 이해하기를 기대하는 일부 최종 사용자에게 문제를 일으 킵니다.
벤트 트랜 버그

5

Location 대신 Assembly.CodeBase를 사용하고 있습니다.

Assembly a;
a = Assembly.GetAssembly(typeof(DaoTests));
string s = a.CodeBase.ToUpper(); // file:///c:/path/name.dll
Assert.AreEqual(true, s.StartsWith("FILE://"), "CodeBase is " + s);
s = s.Substring(7, s.LastIndexOf('/') - 7); // 7 = "file://"
while (s.StartsWith("/")) {
    s = s.Substring(1, s.Length - 1);
}
s = s.Replace("/", "\\");

작동하지만 더 이상 100 % 정확하지 않습니다. http://blogs.msdn.com/suzcook/archive/2003/06/26/assembly-codebase-vs-assembly-location.aspx 의 페이지 는 다음과 같이 말합니다.

"CodeBase는 파일이있는 위치의 URL이고 Location은 실제로로드 된 경로입니다. 예를 들어, 어셈블리가 인터넷에서 다운로드 된 경우 CodeBase는"http : // "로 시작할 수 있습니다. 파일의 위치가 섀도 복사 본인 경우 위치는 섀도 복사본 디렉터리의 파일 복사본 경로가되며 CodeBase가 보장되지 않는 것도 좋습니다. 그러나 디스크에서로드 된 어셈블리에 대해서는 위치가 항상 설정됩니다. "

Location 대신 CodeBase를 사용할 수 있습니다 .


1
@ Kirkenet : URI를 경로로 변환하기위한 많은 코드. 물론 개선 될 수 있습니다. Mike Schall 또는 SoMoS의 답변을보십시오. 문자열 수준에서 URI를 변환하지 말고 대신 적절한 객체를 사용하십시오. 좋습니다. Assembly.CodeBase가 URI 또는 ​​FileInfo와 같이 더 적합한 개체 대신 문자열을 반환하는 것도 어색합니다.
Seven

2

AppDomain.CurrentDomain.RelativeSearchPath로 bin 경로를 얻을 수 있습니다.


2

제안 된 모든 답변은 개발자가 필요한 스 니펫을 포함하도록 코드를 변경할 수있을 때 작동하지만 코드를 변경하지 않고이 작업을 수행하려는 경우 프로세스 탐색기를 사용할 수 있습니다.

시스템에서 실행중인 모든 dll을 나열합니다. 실행중인 응용 프로그램의 프로세스 ID를 결정해야 할 수도 있지만 일반적으로 그렇게 어렵지는 않습니다.

II 내부의 dll에 대해이 작업을 수행하는 방법에 대한 자세한 설명을 작성했습니다 -http://nodogmablog.bryanhogan.net/2016/09/locating-and-checking-an-executing-dll-on-a-running-web -섬기는 사람/


우선, 기사의 코드는 IIS 중심적이며 두 번째로, 현재로드 된 모든 dll을 제공하지만 한 번에 실행중인 것이 아닙니다.
George Mauer

주어진 예제는 iis와 관련이 있지만 dll이 iis 외부의 프로세스에서 실행되는 경우 동일한 단계가 적용됩니다. 프로세스 ID를 식별하기 만하면됩니다. 참고로 기사를 업데이트하겠습니다. 제안 해 주셔서 감사합니다.
Bryan

2

Windows Form 앱에서 간단히 사용할 수 있습니다. Application.StartupPath

그러나 DLL 및 콘솔 응용 프로그램의 경우 코드를 기억하기가 훨씬 어렵습니다 ...

string slash = Path.DirectorySeparatorChar.ToString();
string root = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

root += slash;
string settingsIni = root + "settings.ini"


1

경로에 '#'기호가 포함되어 있으면 잘못된 디렉토리가 표시됩니다. 그래서 UriBuilder.Path와 UriBuilder.Fragment 조합 인 John Sibly 답변의 수정을 사용합니다.

public static string AssemblyDirectory
{
    get
    {
        string codeBase = Assembly.GetExecutingAssembly().CodeBase;
        UriBuilder uri = new UriBuilder(codeBase);
        //modification of the John Sibly answer    
        string path = Uri.UnescapeDataString(uri.Path.Replace("/", "\\") + 
          uri.Fragment.Replace("/", "\\"));
        return Path.GetDirectoryName(path);
     }
}

0

이것이 내가 생각해 낸 것입니다. 웹 프로젝트 사이에서 단위 테스트 (nunit 및 resharper 테스트 러너) ; 나는 이것이 나를 위해 일한다는 것을 알았다.

빌드의 구성을 감지하는 코드를 찾고있었습니다 Debug/Release/CustomName. 아아, #if DEBUG. 누군가가 그것을 향상시킬 수 있다면 !

자유롭게 편집하고 개선하십시오.

앱 폴더 가져 오기 . 웹 루트에 유용합니다. unittests는 테스트 파일의 폴더를 가져옵니다.

public static string AppPath
{
    get
    {
        DirectoryInfo appPath = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);

        while (appPath.FullName.Contains(@"\bin\", StringComparison.CurrentCultureIgnoreCase)
                || appPath.FullName.EndsWith(@"\bin", StringComparison.CurrentCultureIgnoreCase))
        {
            appPath = appPath.Parent;
        }
        return appPath.FullName;
    }
}

bin 폴더 가져 오기 : 리플렉션을 사용하여 어셈블리를 실행하는 데 유용합니다. 빌드 특성으로 인해 파일이 복사 된 경우

public static string BinPath
{
    get
    {
        string binPath = AppDomain.CurrentDomain.BaseDirectory;

        if (!binPath.Contains(@"\bin\", StringComparison.CurrentCultureIgnoreCase)
            && !binPath.EndsWith(@"\bin", StringComparison.CurrentCultureIgnoreCase))
        {
            binPath = Path.Combine(binPath, "bin");
            //-- Please improve this if there is a better way
            //-- Also note that apps like webapps do not have a debug or release folder. So we would just return bin.
#if DEBUG
            if (Directory.Exists(Path.Combine(binPath, "Debug"))) 
                        binPath = Path.Combine(binPath, "Debug");
#else
            if (Directory.Exists(Path.Combine(binPath, "Release"))) 
                        binPath = Path.Combine(binPath, "Release");
#endif
        }
            return binPath;
    }
}

0

이것은 작동해야합니다 :

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
Assembly asm = Assembly.GetCallingAssembly();
String path = Path.GetDirectoryName(new Uri(asm.EscapedCodeBase).LocalPath);

string strLog4NetConfigPath = System.IO.Path.Combine(path, "log4net.config");

이것을 사용하여 DLL 파일 라이브러리를 일부 구성 파일과 함께 배포하고 있습니다 (DLL 파일 내에서 log4net을 사용하는 것입니다).


fileMap여기에 무엇을 사용합니까?
George Mauer

0

내 솔루션을 위치 검색에 적합하다고 생각합니다.

var executingAssembly = new FileInfo((Assembly.GetExecutingAssembly().Location)).Directory.FullName;

이것은 이미 최고 등급 대답 중 하나입니다 이 상황에서 작동하지 않는 무언가와 같은 질문에 명시 적으로 언급되어있다.
George Mauer

사과는 반드시 놓쳤습니다! 분명히 나는 ​​철저히 읽지 않았습니다.
Tez Wingfield

0

NUnit과거 에도 같은 행동을했습니다 . 기본적으로 NUnit어셈블리를 temp 디렉토리에 복사합니다. NUnit설정 에서이 동작을 변경할 수 있습니다 .

여기에 이미지 설명을 입력하십시오

어쩌면 TestDriven.NETMbUnitGUI 같은 설정이 있습니다.


-3

이것을 사용하여 Bin 디렉토리의 경로를 얻습니다.

var i = Environment.CurrentDirectory.LastIndexOf(@"\");
var path = Environment.CurrentDirectory.Substring(0,i); 

이 결과를 얻습니다.

"c : \ 사용자 \ ricooley \ documents \ visual studio 2010 \ 프로젝트 \ Windows_Test_Project \ Windows_Test_Project \ bin"


6
Path.getDirectoryName을 피할 이유가 없습니다.
Max Keller

@MaxKeller 이유가 보이지 않는다고해서 그것이 옳다는 것은 아닙니다. Path.GetDirectoryName의이 대체 방법은 10 배 더 빠릅니다.
Ruslan Veselov

-3

웹 애플리케이션?

Server.MapPath("~/MyDir/MyFile.ext")

2
@christiandev 이것은 대답이지만 잘못된 질문에 대한 대답 인 것 같습니다. 질문에서 이것은 웹 응용 프로그램이 아니라 MbUnit으로 실행되는 어셈블리라는 것이 분명합니다. 그러나 Asp.Net 쉐도우 복사로 인해 대답은 실제로 정확하지 않습니다 (이 질문에 착륙 한 사람이 찾고있는 것일 수도 있음).
George Mauer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.