programing

UriFormatException : 잘못된 URI : 잘못된 포트가 지정되었습니다.

nasanasas 2020. 12. 24. 23:49
반응형

UriFormatException : 잘못된 URI : 잘못된 포트가 지정되었습니다.


Uri의 매개 변수로 사용되는 어셈블리 정규화 문자열은 XAML에서 작동하지만 코드에서 사용할 때 표시되는 오류를 제공합니다.

나는 모든 종류의 UriKind를 같은 결과로 시도했습니다. 이 문제를 어떻게 해결할 수 있습니까?

[Test]
public void LargeImageSource_IsKnown()
{
var uri = new Uri(
        "pack://application:,,,/" + 
        "MyAssembly.Core.Presentation.Wpf;component/" + 
        "Images/Delete.png", UriKind.RelativeOrAbsolute);

Assert.That(
        _pickerActivityCollectionVm.DeleteActivityCommand.LargeImageSource,
        Is.EqualTo(uri));
}

System.UriFormatException : Invalid URI: Invalid port specified.
at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
at System.Uri..ctor(String uriString, UriKind uriKind)

최신 정보

Thomas의 훌륭한 답변과 가독성에 대한 내 자신의 의견을 바탕으로 BaseTestFixture 클래스에서 다음을 사용했습니다. 이것이 다른 사람에게 도움이되기를 바랍니다.

    protected virtual void OnFixtureSetUp() {
        // logging, other one time setup stuff...

        const string scheme = "pack";
        if (!UriParser.IsKnownScheme(scheme)) {
            Assert.That(PackUriHelper.UriSchemePack, Is.EqualTo(scheme));
        }
    }

pack://스킴이 아직 등록되지 않은 상태에서이 코드를 실행하기 때문 입니다. 이 체계는 Application개체 를 만들 때 등록됩니다 . 테스트 픽스처의 설정에이 코드를 추가 할 수 있습니다.

[SetUp]
public void Setup()
{
    if (!UriParser.IsKnownScheme("pack"))
        new System.Windows.Application();
}

편집 : 실제로 pack://체계가 PackUriHelper클래스 의 유형 이니셜 라이저에 등록 된 것 같습니다 (클래스에서 사용됨 Application). 따라서 실제로의 인스턴스를 만들 필요가 없으며 형식 이니셜 라이저가 실행되었는지 확인하기 위해의 Application정적 멤버에 액세스하기 만하면됩니다 PackUriHelper.

[SetUp]
public void Setup()
{
    string s = System.IO.Packaging.PackUriHelper.UriSchemePack;
}

접근이 나타납니다 PackUriHelper.UriSchemePack에만 등록 pack방식 하지application 내가 사용하는 데 필요한 계획, pack://application:,,,/내 단위 테스트에서 구문을. 따라서 나는 new Application()두 계획을 모두 등록하는 데 잘 작동 하는 접근 방식 을 사용해야 했습니다.


Windows Store / WinRT 프로젝트에서이 오류가 표시되는 경우 :

내 C # 앱에서 리소스를로드하려고 할 때 "pack : //"구문을 전혀 사용할 수 없었습니다. 작동 한 것은 이러한 종류의 ms-appx : // 구문이었습니다.

ms-appx://[project folder]/[resource path]

예를 들어 "core"폴더에서 "styles.xaml"이라는 리소스 사전을로드하려고했습니다. 이 URI는 나를 위해 작동했습니다.

dictionary.Source = new System.Uri("ms-appx:///core/styles.xaml");

질문이 WPF를 지정했지만 문제는 매우 비슷해 보였지만 완전히 다른 솔루션을 찾았고 찾는 데 시간이 걸리고 기존 답변이 전혀 도움이되지 않았습니다.

다시 말하지만이 솔루션은 WPF에 적용되지 않습니다.

참조 URL : https://stackoverflow.com/questions/6005398/uriformatexception-invalid-uri-invalid-port-specified

반응형