{"id":107,"date":"2008-03-24T08:21:15","date_gmt":"2008-03-24T13:21:15","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=107"},"modified":"2008-03-24T08:21:15","modified_gmt":"2008-03-24T13:21:15","slug":"f-projects-with-visual-studio-2008","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/","title":{"rendered":"F# Projects with Visual Studio 2008"},"content":{"rendered":"<p>I started a few days ago to study F# and I was struggling with some things that were not good documented. I want to share what I&#8217;ve learn from that and hopefully that will help others.<\/p>\n<p>After you download and install F# (available at <a href=\"http:\/\/research.microsoft.com\/fsharp\/release.aspx\">http:\/\/research.microsoft.com\/fsharp\/release.aspx<\/a>) a new project template will be made available in VS 2008 under Other Porject Types &gt; F# Projects. This is called simply F# Project. When you use that to create a project, it generates a project file with the extension fsharpp. Suppose the project is named demo, then the project file is demo.fsharpp. Initially, it looks like this:<\/p>\n<pre class=\"prettyprint\">\r\n\"General\" \r\n{ \r\n\"ProjectIdGuid\" = \"{4ABF8CC3-3B48-4D3F-8D73-A8BAB9748402}\" \r\n} \r\n\"Configurations\" \r\n{ \r\n   \"Debug|Win32\" \r\n   { \r\n   \"ProjectType\" = \"EXE\" \r\n   \"OptLevel\" = \"Off\" \r\n   \"StrongNamingLevel\" = \"None\" \r\n   \"OutputPath\" = \"\" \r\n   \"SearchPath\" = \"\" \r\n   \"StrongNameFile\" = \"\" \r\n   \"OutputBase\" = \"\" \r\n   \"CustomCommandLine\" = \"\" \r\n   \"CustomCompiler\" = \"\" \r\n   \"DebugCheck\" = \"TRUE\" \r\n   \"CustomCompilationCheck\" = \"FALSE\" \r\n   \"DebugStartMode\" = \"0\" \r\n   \"StartApp\" = \"\" \r\n   \"StartAppPath\" = \"\" \r\n   \"CustomStartupArguments\" = \"\" \r\n   } \r\n   \"Release|Win32\" \r\n   { \r\n   \"ProjectType\" = \"EXE\" \r\n   \"OptLevel\" = \"3\" \r\n   \"StrongNamingLevel\" = \"None\" \r\n   \"OutputPath\" = \"\" \r\n   \"SearchPath\" = \"\" \r\n   \"StrongNameFile\" = \"\" \r\n   \"OutputBase\" = \"\" \r\n   \"CustomCommandLine\" = \"\" \r\n   \"CustomCompiler\" = \"\" \r\n   \"DebugCheck\" = \"FALSE\" \r\n   \"CustomCompilationCheck\" = \"FALSE\" \r\n   \"DebugStartMode\" = \"0\" \r\n   \"StartApp\" = \"\" \r\n   \"StartAppPath\" = \"\" \r\n   \"CustomStartupArguments\" = \"\" \r\n   } \r\n} \r\n\"Files\" \r\n{ \r\n} \r\n\"ProjStartupServices\" \r\n{ \r\n} \r\n\"Globals\" \r\n{ \r\n}<\/pre>\n<p>Now, you can add files to the project. The following image shows the available project items:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" border=\"0\" align=\"middle\" width=\"558\" src=\"\/blog\/wp-content\/uploads\/2008\/03\/fsharpitems.png\" alt=\"Available F# project items\" height=\"394\" \/><\/p>\n<p>You can see among the items the following:<\/p>\n<ul>\n<li>F# Source File &#8211; a file with extension .fs containing implementation of types and functions<\/li>\n<li>F# Interface File &#8211; a file with extension .fsi containing declarations\/signatures for the implementation in a .fs file<\/li>\n<li>ML\/F# Source File &#8211; a file with extension .ml containing the implmenetation of a module<\/li>\n<li>ML\/F# Interface File &#8211; a file with extension .mli containing the declaration\/signature of one or more F# modules<\/li>\n<\/ul>\n<p>An .ml file is just an .fs file, except that is should contain the implementation of a module. A module is a named collection of definitions. On the other hand, the difference between .mli and .fsi is that the first should be used for declaring modules.<\/p>\n<p>So, let&#8217;s add a F# source file to our empty project, and let&#8217;s call it main.fs. Visual Studio will populate it with sample code, but ignore that and replace it with:<\/p>\n<pre class=\"prettyprint\">\r\n#light   \r\n\r\nopen System   \r\n\r\nlet main() = \r\n   Console.WriteLine(\"hello world\") \r\n   Console.ReadKey() \r\n\r\nmain()<\/pre>\n<p>Well, I&#8217;m not going into the details of the syntax here; it&#8217;s enough to say that this small program prints &#8220;hello world&#8221; in the console and waits for the user to press a key. (Build it and run it).But let&#8217;s say we want to put the code that prints the message in the console in a separate function:<\/p>\n<pre class=\"prettyprint\">\r\n#light \r\n\r\nopen System \r\n\r\nlet welcome() = \r\n   Console.WriteLine(\"hello world\") \r\n\r\nlet main() = \r\n   welcome() \r\n   Console.ReadKey() \r\n\r\nmain()<\/pre>\n<p>This has the same result as the previous program. But what if I want that in a separate file? Well, let&#8217;s create a new F# source file and call it hellos.fs, and put the code in it:<\/p>\n<pre class=\"prettyprint\">\r\n#light   \r\n\r\nopen System   \r\n\r\nlet welcome() = \r\n   Console.WriteLine(\"hello world\")<\/pre>\n<p>with the main.fs file looking like this:<\/p>\n<pre class=\"prettyprint\">\r\n#light \r\n\r\nopen System \r\n\r\nlet main() = \r\n   welcome() \r\n   Console.ReadKey() \r\n\r\nmain()<\/pre>\n<p>If you build this project, you&#8217;ll get the following error:<\/p>\n<blockquote class=\"codeblock\"><p>main.fs(6,1): error: FS0039: The value or constructor &#8216;welcome&#8217; is not defined.<\/p><\/blockquote>\n<p>Looks like the welcome function is not defined. Why? Because we should also have signature file (.fsi) that should declare what hellos.hs is defining. It&#8217;s just like a header file in C or C++, containing the declaration of functions or classes.Let&#8217;s add a file called hellos.fsi with the following content:<\/p>\n<pre class=\"prettyprint\">\r\n#light   \r\n\r\nval welcome : unit -&gt; unit<\/pre>\n<p>Building this yields the following error:<\/p>\n<blockquote class=\"codeblock\"><p>hellos.fsi(1,0): error: An implementation of file or module Hellos has already been given. Compilation order is significant in F# because of type inference. You may need to adjust the order of your files to place the signature file before the implementation. In Visual Studio files are type-checked in the order they appear in the project file, and to edit a project file right-click on the project node, unload the project, right-click again, edit the project file manually then the reload the project.<\/p><\/blockquote>\n<p>The error message is very explanatory: order of compilation is not ok:<\/p>\n<blockquote class=\"codeblock\"><p>\nC:\\Program Files\\FSharp-1.9.3.14\\bin\\fsc.exe &#8211;fullpaths &#8211;progress -Ooff -g -o &#8220;f:\\marius\\f#\\demo\\demo.exe&#8221; &#8220;main.fs&#8221; &#8220;hellos.fs&#8221; &#8220;hellos.fsi&#8221;<\/p><\/blockquote>\n<p>main.fs is compiled before hellos.fs, and this one before hellos.fsi. In fact, they should be completly reserved. The only way to do that is manually, so you have to unload the project, edit the project file and load it again.If you look at the project file, it contains this:<\/p>\n<pre class=\"prettyprint\">\r\n\"Files\" \r\n{ \r\n   \"main.fs\" \r\n   { \r\n   \"ProjRelPath\" = \"T\" \r\n   } \r\n   \"hellos.fs\" \r\n   { \r\n   \"ProjRelPath\" = \"T\" \r\n   } \r\n   \"hellos.fsi\" \r\n   { \r\n   \"ProjRelPath\" = \"T\" \r\n   } \r\n}<\/pre>\n<p>The order of files must be changed to:<\/p>\n<pre class=\"prettyprint\">\r\n\"Files\" \r\n{ \r\n    \"hellos.fsi\" \r\n    { \r\n    \"ProjRelPath\" = \"T\" \r\n    } \r\n    \"hellos.fs\" \r\n    { \r\n    \"ProjRelPath\" = \"T\" \r\n    } \r\n    \"main.fs\" \r\n    { \r\n    \"ProjRelPath\" = \"T\" \r\n    } \r\n}<\/pre>\n<p>But if you build it now, you again get an error:<\/p>\n<blockquote class=\"codeblock\"><p>main.fs(6,3): error: FS0039: The value or constructor &#8216;welcome&#8217; is not defined.<\/p><\/blockquote>\n<p>The reason is that a module name is inferred from the name of the hellows.fsi file (by capitalizing it). Thus, we either use the fully qualified name Hellows.welcome(), or apen the Hellos module in file main.fs.<\/p>\n<pre class=\"prettyprint\">\r\n#light \r\n\r\nopen System \r\nopen Hellos \r\n\r\nlet main() = \r\n    welcome() \r\n    Console.ReadKey() \r\n\r\nmain()<\/pre>\n<p>And now everything works again! You can change the extensions from .fsi to .mli and from .fs to .ml and have the same result.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I started a few days ago to study F# and I was struggling with some things that were not good documented. I want to share what I&#8217;ve learn from that and hopefully that will help others. After you download and install F# (available at http:\/\/research.microsoft.com\/fsharp\/release.aspx) a new project template will be made available in VS &#8230; <a title=\"F# Projects with Visual Studio 2008\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/\" aria-label=\"Read more about F# Projects with Visual Studio 2008\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[37,10],"tags":[],"class_list":["post-107","post","type-post","status-publish","format-standard","hentry","category-fsharp","category-visual-studio"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"F# Projects with Visual Studio 2008\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2008-03-24T13:21:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2008-03-24T13:21:15+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"F# Projects with Visual Studio 2008\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#article\",\"name\":\"F# Projects with Visual Studio 2008\",\"headline\":\"F# Projects with Visual Studio 2008\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"\\\/blog\\\/wp-content\\\/uploads\\\/2008\\\/03\\\/fsharpitems.png\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#articleImage\"},\"datePublished\":\"2008-03-24T08:21:15+02:00\",\"dateModified\":\"2008-03-24T08:21:15+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#webpage\"},\"articleSection\":\"F#, Visual Studio\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"position\":4,\"name\":\".NET\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/fsharp\\\/#listItem\",\"name\":\"F#\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/fsharp\\\/#listItem\",\"position\":5,\"name\":\"F#\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/fsharp\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#listItem\",\"name\":\"F# Projects with Visual Studio 2008\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#listItem\",\"position\":6,\"name\":\"F# Projects with Visual Studio 2008\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/fsharp\\\/#listItem\",\"name\":\"F#\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/\",\"name\":\"F# Projects with Visual Studio 2008\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2008\\\/03\\\/24\\\/f-projects-with-visual-studio-2008\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2008-03-24T08:21:15+02:00\",\"dateModified\":\"2008-03-24T08:21:15+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"F# Projects with Visual Studio 2008","description":"","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#article","name":"F# Projects with Visual Studio 2008","headline":"F# Projects with Visual Studio 2008","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"image":{"@type":"ImageObject","url":"\/blog\/wp-content\/uploads\/2008\/03\/fsharpitems.png","@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#articleImage"},"datePublished":"2008-03-24T08:21:15+02:00","dateModified":"2008-03-24T08:21:15+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#webpage"},"articleSection":"F#, Visual Studio"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","position":4,"name":".NET","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/fsharp\/#listItem","name":"F#"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/fsharp\/#listItem","position":5,"name":"F#","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/fsharp\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#listItem","name":"F# Projects with Visual Studio 2008"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#listItem","position":6,"name":"F# Projects with Visual Studio 2008","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/fsharp\/#listItem","name":"F#"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/","name":"F# Projects with Visual Studio 2008","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2008-03-24T08:21:15+02:00","dateModified":"2008-03-24T08:21:15+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"F# Projects with Visual Studio 2008","og:url":"https:\/\/mariusbancila.ro\/blog\/2008\/03\/24\/f-projects-with-visual-studio-2008\/","article:published_time":"2008-03-24T13:21:15+00:00","article:modified_time":"2008-03-24T13:21:15+00:00","twitter:card":"summary","twitter:title":"F# Projects with Visual Studio 2008"},"aioseo_meta_data":{"post_id":"107","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:13:02","updated":"2025-12-12 07:18:10","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"I started a few days ago to study F# and I was struggling with some things that were not good documented. I want to share what I&#8217;ve learn from that and hopefully that will help others. After you download and install F# (available at http:\/\/research.microsoft.com\/fsharp\/release.aspx) a new project template will be made available in VS&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/fsharp\/\" class=\"advgb-post-tax-term\">F#<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">Visual Studio<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">F#<\/span>","<span class=\"advgb-post-tax-term\">Visual Studio<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 19 years ago","modified":"Updated 19 years ago"},"absolute_dates":{"created":"Posted on March 24, 2008","modified":"Updated on March 24, 2008"},"absolute_dates_time":{"created":"Posted on March 24, 2008 8:21 am","modified":"Updated on March 24, 2008 8:21 am"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-1J","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=107"}],"version-history":[{"count":0,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/107\/revisions"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}