示例#1
0
        public void BrokenPDBStream()
        {
            string source = @"class Foo {}";
            var compilation = CreateCompilationWithMscorlib(source, null, OptionsDll.WithDebugInformationKind(DebugInformationKind.Full));

            var output = new MemoryStream();
            var pdb = new BrokenStream();
            pdb.BreakHow = 2;
            var result = compilation.Emit(output, GetUniqueName(), GetUniqueName(), pdb);
            result.Diagnostics.Verify(
                    Diagnostic(ErrorCode.FTL_DebugEmitFailure).WithArguments("Exception from HRESULT: 0x806D0004")
                );

            Func<EmitResult> f = () => compilation.Emit(output, GetUniqueName(), GetUniqueName(), pdb);
            pdb.Dispose();
            result = f();

            result.Diagnostics.Verify(
                    Diagnostic(ErrorCode.FTL_DebugEmitFailure).WithArguments("Exception from HRESULT: 0x806D0004")
                );
        }
        public void BrokenPDBStream()
        {
            string source = @"class Foo {}";
            var compilation = CreateCompilationWithMscorlib(source, null, TestOptions.DebugDll);

            var output = new MemoryStream();
            var pdb = new BrokenStream();
            pdb.BreakHow = 2;
            var result = compilation.Emit(output, pdb);

            // error CS0041: Unexpected error writing debug information -- 'Exception from HRESULT: 0x806D0004'
            var err = result.Diagnostics.Single();

            Assert.Equal((int)ErrorCode.FTL_DebugEmitFailure, err.Code);
            Assert.Equal(1, err.Arguments.Count);
            var ioExceptionMessage = new IOException().Message;
            Assert.Equal(ioExceptionMessage, (string)err.Arguments[0]);

            pdb.Dispose();
            result = compilation.Emit(output, pdb);

            // error CS0041: Unexpected error writing debug information -- 'Exception from HRESULT: 0x806D0004'
            err = result.Diagnostics.Single();

            Assert.Equal((int)ErrorCode.FTL_DebugEmitFailure, err.Code);
            Assert.Equal(1, err.Arguments.Count);
            Assert.Equal(ioExceptionMessage, (string)err.Arguments[0]);
        }