未验证 提交 b706a2f3 编写于 作者: D Don Syme 提交者: GitHub

tp exn messages (#9009)

上级 ce10b794
...@@ -38,8 +38,17 @@ module internal ExtensionTyping = ...@@ -38,8 +38,17 @@ module internal ExtensionTyping =
let GetTypeProviderImplementationTypes (runTimeAssemblyFileName, designTimeAssemblyNameString, m:range, compilerToolPaths:string list) = let GetTypeProviderImplementationTypes (runTimeAssemblyFileName, designTimeAssemblyNameString, m:range, compilerToolPaths:string list) =
// Report an error, blaming the particular type provider component // Report an error, blaming the particular type provider component
let raiseError (e: exn) = let raiseError designTimeAssemblyPathOpt (e: exn) =
raise (TypeProviderError(FSComp.SR.etProviderHasWrongDesignerAssembly(typeof<TypeProviderAssemblyAttribute>.Name, designTimeAssemblyNameString, e.Message), runTimeAssemblyFileName, m)) let attrName = typeof<TypeProviderAssemblyAttribute>.Name
let exnTypeName = e.GetType().FullName
let exnMsg = e.Message
match designTimeAssemblyPathOpt with
| None ->
let msg = FSComp.SR.etProviderHasWrongDesignerAssemblyNoPath(attrName, designTimeAssemblyNameString, exnTypeName, exnMsg)
raise (TypeProviderError(msg, runTimeAssemblyFileName, m))
| Some designTimeAssemblyPath ->
let msg = FSComp.SR.etProviderHasWrongDesignerAssembly(attrName, designTimeAssemblyNameString, designTimeAssemblyPath, exnTypeName, exnMsg)
raise (TypeProviderError(msg, runTimeAssemblyFileName, m))
let designTimeAssemblyOpt = getTypeProviderAssembly (runTimeAssemblyFileName, designTimeAssemblyNameString, compilerToolPaths, raiseError) let designTimeAssemblyOpt = getTypeProviderAssembly (runTimeAssemblyFileName, designTimeAssemblyNameString, compilerToolPaths, raiseError)
...@@ -54,7 +63,17 @@ module internal ExtensionTyping = ...@@ -54,7 +63,17 @@ module internal ExtensionTyping =
yield t ] yield t ]
filtered filtered
with e -> with e ->
raiseError e let folder = System.IO.Path.GetDirectoryName loadedDesignTimeAssembly.Location
let exnTypeName = e.GetType().FullName
let exnMsg = e.Message
match e with
| :? System.IO.FileLoadException ->
let msg = FSComp.SR.etProviderHasDesignerAssemblyDependency(designTimeAssemblyNameString, folder, exnTypeName, exnMsg)
raise (TypeProviderError(msg, runTimeAssemblyFileName, m))
| _ ->
let msg = FSComp.SR.etProviderHasDesignerAssemblyException(designTimeAssemblyNameString, folder, exnTypeName, exnMsg)
raise (TypeProviderError(msg, runTimeAssemblyFileName, m))
| None -> [] | None -> []
let StripException (e: exn) = let StripException (e: exn) =
......
...@@ -1178,7 +1178,8 @@ fscTooManyErrors,"Exiting - too many errors" ...@@ -1178,7 +1178,8 @@ fscTooManyErrors,"Exiting - too many errors"
3028,etProvidedTypeHasUnexpectedName,"Expected provided type named '%s' but provided type has 'Name' with value '%s'" 3028,etProvidedTypeHasUnexpectedName,"Expected provided type named '%s' but provided type has 'Name' with value '%s'"
3029,etEventNoAdd,"Event '%s' on provided type '%s' has no value from GetAddMethod()" 3029,etEventNoAdd,"Event '%s' on provided type '%s' has no value from GetAddMethod()"
3030,etEventNoRemove,"Event '%s' on provided type '%s' has no value from GetRemoveMethod()" 3030,etEventNoRemove,"Event '%s' on provided type '%s' has no value from GetRemoveMethod()"
3031,etProviderHasWrongDesignerAssembly,"Assembly attribute '%s' refers to a designer assembly '%s' which cannot be loaded or doesn't exist. %s" 3031,etProviderHasWrongDesignerAssemblyNoPath,"Assembly attribute '%s' refers to a designer assembly '%s' which cannot be loaded or doesn't exist. The exception reported was: %s - %s"
3031,etProviderHasWrongDesignerAssembly,"Assembly attribute '%s' refers to a designer assembly '%s' which cannot be loaded from path '%s'. The exception reported was: %s - %s"
3032,etProviderDoesNotHaveValidConstructor,"The type provider does not have a valid constructor. A constructor taking either no arguments or one argument of type 'TypeProviderConfig' was expected." 3032,etProviderDoesNotHaveValidConstructor,"The type provider does not have a valid constructor. A constructor taking either no arguments or one argument of type 'TypeProviderConfig' was expected."
3033,etProviderError,"The type provider '%s' reported an error: %s" 3033,etProviderError,"The type provider '%s' reported an error: %s"
3034,etIncorrectParameterExpression,"The type provider '%s' used an invalid parameter in the ParameterExpression: %s" 3034,etIncorrectParameterExpression,"The type provider '%s' used an invalid parameter in the ParameterExpression: %s"
...@@ -1192,6 +1193,8 @@ fscTooManyErrors,"Exiting - too many errors" ...@@ -1192,6 +1193,8 @@ fscTooManyErrors,"Exiting - too many errors"
3045,etInvalidStaticArgument,"Invalid static argument to provided type. Expected an argument of kind '%s'." 3045,etInvalidStaticArgument,"Invalid static argument to provided type. Expected an argument of kind '%s'."
3046,etErrorApplyingStaticArgumentsToType,"An error occured applying the static arguments to a provided type" 3046,etErrorApplyingStaticArgumentsToType,"An error occured applying the static arguments to a provided type"
3047,etUnknownStaticArgumentKind,"Unknown static argument kind '%s' when resolving a reference to a provided type or method '%s'" 3047,etUnknownStaticArgumentKind,"Unknown static argument kind '%s' when resolving a reference to a provided type or method '%s'"
3048,etProviderHasDesignerAssemblyDependency,"The type provider designer assembly '%s' could not be loaded from folder '%s' because a dependency was missing or could not loaded. All dependencies of the type provider designer assembly must be located in the same folder as that assembly. The exception reported was: %s - %s"
3049,etProviderHasDesignerAssemblyException,"The type provider designer assembly '%s' could not be loaded from folder '%s'. The exception reported was: %s - %s"
invalidNamespaceForProvidedType,"invalid namespace for provided type" invalidNamespaceForProvidedType,"invalid namespace for provided type"
invalidFullNameForProvidedType,"invalid full name for provided type" invalidFullNameForProvidedType,"invalid full name for provided type"
#3050,etGenerateAttributeRequiresInternal,"The 'Generate' attribute must be used with a type definition with 'internal' visibility" #3050,etGenerateAttributeRequiresInternal,"The 'Generate' attribute must be used with a type definition with 'internal' visibility"
......
...@@ -298,7 +298,7 @@ module internal FSharpEnvironment = ...@@ -298,7 +298,7 @@ module internal FSharpEnvironment =
try try
Some (Assembly.UnsafeLoadFrom designTimeAssemblyPath) Some (Assembly.UnsafeLoadFrom designTimeAssemblyPath)
with e -> with e ->
raiseError e raiseError (Some designTimeAssemblyPath) e
let rec searchParentDirChain path assemblyName = let rec searchParentDirChain path assemblyName =
seq { seq {
...@@ -345,7 +345,7 @@ module internal FSharpEnvironment = ...@@ -345,7 +345,7 @@ module internal FSharpEnvironment =
let name = AssemblyName designTimeAssemblyName let name = AssemblyName designTimeAssemblyName
Some (Assembly.Load (name)) Some (Assembly.Load (name))
with e -> with e ->
raiseError e raiseError None e
let getCompilerToolsDesignTimeAssemblyPaths compilerToolPaths = let getCompilerToolsDesignTimeAssemblyPaths compilerToolPaths =
searchToolPaths None compilerToolPaths searchToolPaths None compilerToolPaths
providerAttributeErrorConsume.fsx(1,1,1,48): parse error FS3031: The type provider '<ASSEMBLY>' reported an error: Assembly attribute 'TypeProviderAssemblyAttribute' refers to a designer assembly 'Invalid.Assembly.Name' which cannot be loaded or doesn't exist. Could not load file or assembly '<URIPATH>Invalid.Assembly.Name.dll' or one of its dependencies. The system cannot find the file specified. providerAttributeErrorConsume.fsx(1,1,1,48): parse error FS3031: The type provider '<ASSEMBLY>' reported an error: Assembly attribute 'TypeProviderAssemblyAttribute' refers to a designer assembly 'Invalid.Assembly.Name' which cannot be loaded or doesn't exist. The exception reported was: Could not load file or assembly '<URIPATH>Invalid.Assembly.Name.dll' or one of its dependencies. The system cannot find the file specified.
providerAttributeErrorConsume.fsx(1,1,1,48): parse error FS3005: Referenced assembly '<ASSEMBLY>' has assembly level attribute 'Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute' but no public type provider classes were found providerAttributeErrorConsume.fsx(1,1,1,48): parse error FS3005: Referenced assembly '<ASSEMBLY>' has assembly level attribute 'Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute' but no public type provider classes were found
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册