{"action":"created","issue":{"url":"https://api.github.com/repos/Microsoft/msbuild/issues/613","repository_url":"https://api.github.com/repos/Microsoft/msbuild","labels_url":"https://api.github.com/repos/Microsoft/msbuild/issues/613/labels{/name}","comments_url":"https://api.github.com/repos/Microsoft/msbuild/issues/613/comments","events_url":"https://api.github.com/repos/Microsoft/msbuild/issues/613/events","html_url":"https://github.com/Microsoft/msbuild/issues/613","id":154486637,"number":613,"title":"Please Consider Improving Project Format and Structure (Serialized POCO/Format Agnostic)","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},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":114,"created_at":"2016-05-12T13:47:57Z","updated_at":"2016-10-24T22:00:21Z","closed_at":null,"body":"[Going to try this again](https://github.com/Microsoft/msbuild/issues/16), but hopefully with a better defined ask.  The request is not to support a particular format, but to improve the MSBuild system overall so that it can support any format, while also making it more accessible/discoverable by tooling and (possible) designers.\r\n\r\nBased on the current climate of .NET Core having its project.json merged back into MSBuild, this topic might get a little more interest conversation.  Also, [the Roslyn team is sending developers your way](https://github.com/dotnet/roslyn/issues/11235#issuecomment-218490900), so, there's that. :)\r\n\r\n**Use Case:** Developers **_REALLY_** like their file formats!\r\n\r\n**Problem(s):**\r\n1. MSBuild format is rooted in an arbitrary, not well-defined/known schema (difficult to explore and discover).\r\n2. MSBuild project structure can only be defined/edited in XML.\r\n3. MSFT development ecosystem (for better or for worse) is now comprised of two camps: web application developers and native application developers each has their own way of doing things and neither really likes the approach of the other.\r\n\r\n**Suggestions:**\r\n1. Create a well-defined, well-known .NET object model that defines the Project Model (Project API).  Visual Studio then loads (and saves) these as POCOs on disk.  In this design, there are no arbitrary schemas or data files, but 100% serialized POCOs which are read and saved to disk.  [Another issue on Roslyn's board goes into more detail around this](https://github.com/dotnet/roslyn/issues/11263).\r\n2. Adopt a \"Bring Your Own Serializer\" strategy.  Adding a new format/type is as simple as installing a Visual Studio extension (or even auto-detected and installed for you upon detection/initial file load).  To start with, JSON5 and XML should be supported out of the box, but developers should be able to bring on any format they wish, such as Xaml, Yaml, etc.\r\n3. Allow (optional) naming extensions for projects to help identify stored format.  Examples:\r\n- `MyProject.csproj.json5` <-- C# Project serialized as JSON5\r\n- `MyProject.vbproj.xml` <-- VB.NET Project serialized as XML\r\n- `MyProject.fsproj.xaml` <-- F# Project serialized as XAML (OH YES I WENT THERE!!!)\r\n\r\nThose are off the top of my head to get the conversation started.  All of these are open to feedback of course and I would love to hear the thoughts of developers around this.  Thank you for any consideration and/or support!"},"comment":{"url":"https://api.github.com/repos/Microsoft/msbuild/issues/comments/255878811","html_url":"https://github.com/Microsoft/msbuild/issues/613#issuecomment-255878811","issue_url":"https://api.github.com/repos/Microsoft/msbuild/issues/613","id":255878811,"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-10-24T22:00:21Z","updated_at":"2016-10-24T22:00:21Z","body":"So to sort of reiterate the purpose of this issue: it's not a request to support a particular format (JSON/XML/etc) in the traditional sense, but to move to _a POCO-based model_ that will allow you to serialize it in _any_ format you wish (with XML and/or JSON ideally being supported out of the box).  Once it's capable of being serialized/deserialized in any particular format, then you as a developer/team are free to use the tooling you feel most comfortable with to describe your build files, thereby (in theory 😄) maximizing your development efficiency.\r\n\r\nThe idea is not to constrict to a particular format (which seems to have been the dangerously divisive strategy employed to date), but to allow developers and their teams the _choice_ to develop their build files in the format in which they feel they are the most comfortable and productive.\r\n\r\nIn short, supporting **only** JSON or **only** XML is about as bad as creating a solution where it supports **only** C# or **only** VB.NET.  Same difference.  We obviously have the ability to create .NET projects in any supported .NET language.  In the same spirit, the analogous ask here is the ability to create MSBuild files in any supported data format (as they would all be based off the same POCO model).\r\n\r\nBTW/FWIW, I am very happy to see the upvotes for this item currently sitting at 40, which make it by far and away the most voted issue in this repo in that regard:\r\nhttps://github.com/Microsoft/msbuild/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc\r\n\r\nThank you to all who have supported this idea!"}}
{"actor":{"display_login":"Mike-EEE"}}