2010-06-23 10 views
8

Tiene una solución con un proyecto C# en ella. SomeComp.Framework es el nombre. Agregue un proyecto F # a la solución. Hace referencia al proyecto SomeComp.Framework en el proyecto F #. Inserta un archivo de script - test.fsx en el proyecto F #. ¿Cuál es la forma correcta de hacer referencia al ensamblaje C# en el archivo de script?F #/C# - fsx Archivos de script y referencias de proyectos

#r "SomeComp.Framework.dll" // doesn't work 

¿Hay alguna forma de hacer esto sin codificar en una ruta? ¿El archivo .fsx obtiene alguna configuración/propiedad que se encuentre dentro de un proyecto F #?

Respuesta

15

No, no obtiene ninguna configuración del proyecto, tiene que codificar la ruta. (Este es un escenario que veremos cómo mejorar para una versión futura). Tenga cuidado con las rutas 'Debug' versus 'Release' también.

EDITAR

Ok, wow, me di cuenta de algo útil:

#r "EnvDTE" 
#r "EnvDTE80" 
#r "VSLangProj" 

let appObj = System.Runtime.InteropServices.Marshal. 
       GetActiveObject("VisualStudio.DTE") :?> EnvDTE80.DTE2 
let solnDir = System.IO.Path.GetDirectoryName(appObj.Solution.FileName) 
let cfg = appObj.Solution.SolutionBuild.ActiveConfiguration.Name 
let libraryDLLPath = System.IO.Path.Combine 
         [| solnDir; "Library1"; "bin"; cfg |] 

//#r libraryDLL // illegal, since #r takes a string literal, but... 

let props = appObj.Properties("F# Tools", "F# Interactive") 
let cla = props.Item("FsiCommandLineArgs") 
cla.Value <- sprintf "--optimize -I:\"%s\"" libraryDLLPath 

appObj.ExecuteCommand("View.F#Interactive", "") 
appObj.ExecuteCommand("OtherContextMenus.FSIConsoleContext.ResetSession", "") 

#r "Library1.dll" 

ejecutar ese como dos fragmentos, primero de todo pero la última línea, y, finalmente, la última línea. Básicamente cambia su configuración de FSI dentro de VS y restablece la sesión, por lo que posteriormente puede simplemente #r "MyLibrary.dll" sin una ruta.

Es un hack gigante, pero parece que algunas personas pueden encontrarlo útil, así que lo estoy compartiendo.

+0

¿Puede una secuencia de comandos continuar desde donde se está ejecutando? eso también sería bueno. – BuddyJoe

+1

Tenga en cuenta que este methof puede ocasionarle problemas si hay más de una instancia de VS ejecutándose en su sistema. –

+0

muy bueno. Gracias. votaciones – BuddyJoe

Cuestiones relacionadas