{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/roslyn-project-system/issues/37","repository_url":"https://api.github.com/repos/dotnet/roslyn-project-system","labels_url":"https://api.github.com/repos/dotnet/roslyn-project-system/issues/37/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/roslyn-project-system/issues/37/comments","events_url":"https://api.github.com/repos/dotnet/roslyn-project-system/issues/37/events","html_url":"https://github.com/dotnet/roslyn-project-system/issues/37","id":154634785,"number":37,"title":"Project System: Please Consider POCO as Schema for Project File/Structure","user":{"login":"davkean","id":1103906,"avatar_url":"https://avatars.githubusercontent.com/u/1103906?v=3","gravatar_id":"","url":"https://api.github.com/users/davkean","html_url":"https://github.com/davkean","followers_url":"https://api.github.com/users/davkean/followers","following_url":"https://api.github.com/users/davkean/following{/other_user}","gists_url":"https://api.github.com/users/davkean/gists{/gist_id}","starred_url":"https://api.github.com/users/davkean/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davkean/subscriptions","organizations_url":"https://api.github.com/users/davkean/orgs","repos_url":"https://api.github.com/users/davkean/repos","events_url":"https://api.github.com/users/davkean/events{/privacy}","received_events_url":"https://api.github.com/users/davkean/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/dotnet/roslyn-project-system/labels/Discussion","name":"Discussion","color":"0e8a16"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":25,"created_at":"2016-05-13T05:07:43Z","updated_at":"2016-05-25T18:08:14Z","closed_at":null,"body":"_From @Mike-EEE on May 12, 2016 8:5_\n\nI (unfortunately) made a lengthy, [somewhat off-topic post/rant](https://github.com/dotnet/roslyn/issues/11235#issuecomment-218597038) about this in [another thread](https://github.com/dotnet/roslyn/issues/11235) yesterday so I am going to throw it down here in a dedicated issue and see how it goes.\r\n\r\nThere's talk about the new build system.  There has been previous efforts over at MSBuild to [examine the build system and improve upon its format](https://github.com/Microsoft/msbuild/issues/16).  These were ultimately denied, expressing a \"better safe than sorry\" (huh? :stuck_out_tongue:) perspective.  So, with all the energy/enthusiasm/magic over here, this appears to be the new lightning rod for developer creativity. :smile: \r\n\r\nMy ask is simple: Continue to use the XML format (or even JSON), but move away from the element mapping-to-POCO strategy and make the csproj/xproj/proj file a fully (XML or JSON) serialized POCO instead, so that at the very least we know the precise POCO (and definition/schema) that we are dealing with and constructing.  This helps not only developer experience (and thereby **sanity** :smile: ) but also any tools/designers that wish to build off of it.\r\n\r\nCurrently, the project file looks like something like the following:\r\n\r\n```\r\n<Project>\r\n <ItemGroup> ... </ItemGroup>\r\n <PropertyGroup>... </PropertyGroup>\r\n</Project>\r\n```\r\n\r\nThis is great for defining arbitrary data in a file, but it is completely useless for someone who opens up the file and wondering: \"what the **** is a `<Project />` element?!\"\r\n\r\nThe above design requires at least three artifacts:\r\n1. The data file itself, expressing the data constructs (.csproj)\r\n2. The schema file, defining what is allowed (.xsd if in XML, and I have never seen one in my 15 years of .NET for a .csproj file!)\r\n3. The POCO that ultimately gets created from reading in the data file.\r\n\r\nOh but wait, there's more!  Due to the above design, I bet you there is at least a **fourth** artifact!\r\n4. The mapping class/utility that reads in the data file as an `XmlDocument` and laboriously reads in element by element, attribute by attribute to create and instantiate the POCO object(s) with their initialized values. OH THE INEFFICIENT HORROR!!\r\n\r\nConversely, if we take [a page from Xaml file design](http://blog.developers.win/2016/02/has-the-tide-turned-on-project-json/), we have the data file's schema baked right into the file by way of the _class definition_.  As a result, we only require two artifacts:\r\n1. The data file (.xaml)\r\n2. The class definition file (.cs/.vb)\r\n\r\nThis is a MUCH easier to design to produce, maintain, and manage.  Tooling can tie right into the class file (using Roslyn??? :smile: ) and get all the information it needs.  Developers do NOT need to hunt and chase down schemas in some arbitrary, hidden location (registry?! LOL, might as well be!) to figure out the file they are working with!\r\n\r\nThis is a very (relatively) simple design improvement that will make a world's (universe's!) difference in project look and feel.  I cringe every time I have to go into the .csproj file because it is SO ARCANE AND MYSTERIOUS TO WORK WITH!\r\n\r\nFinally, by using a class definition as the schema, another headache that this eradicates is the inconsistency between camelCase and PascalCase when declaring/using symbols/attribute names within the file (ALL THE INCONSIST!).\r\n\r\nAnyways, thank you for any consideration and dialogue around this idea.\n\n_Copied from original issue: dotnet/roslyn#11263_"},"comment":{"url":"https://api.github.com/repos/dotnet/roslyn-project-system/issues/comments/221658715","html_url":"https://github.com/dotnet/roslyn-project-system/issues/37#issuecomment-221658715","issue_url":"https://api.github.com/repos/dotnet/roslyn-project-system/issues/37","id":221658715,"user":{"login":"Mike-EEE","id":2931376,"avatar_url":"https://avatars.githubusercontent.com/u/2931376?v=3","gravatar_id":"","url":"https://api.github.com/users/Mike-EEE","html_url":"https://github.com/Mike-EEE","followers_url":"https://api.github.com/users/Mike-EEE/followers","following_url":"https://api.github.com/users/Mike-EEE/following{/other_user}","gists_url":"https://api.github.com/users/Mike-EEE/gists{/gist_id}","starred_url":"https://api.github.com/users/Mike-EEE/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mike-EEE/subscriptions","organizations_url":"https://api.github.com/users/Mike-EEE/orgs","repos_url":"https://api.github.com/users/Mike-EEE/repos","events_url":"https://api.github.com/users/Mike-EEE/events{/privacy}","received_events_url":"https://api.github.com/users/Mike-EEE/received_events","type":"User","site_admin":false},"created_at":"2016-05-25T18:08:14Z","updated_at":"2016-05-25T18:08:14Z","body":"SHIP IT!!! Oh, wait. :smile: "}}
{"actor":{"display_login":"Mike-EEE"}}