New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Design new interface between Project System and Roslyn #35378
Comments
@panopticoncentral Looks reasonable? |
We concluded that the interface proposed above is conceptually very close to
We had a deep discussion on versions and checksums. The insight is that versions are necessary to facilitate optimizations within CPS. System that is fully based on checksums would be ideal and theoretically possible, but in practice might need too much throughput that we can't provide. Consider a system where the VS client starts by checking out a repo at certain commit sha. Then the cloud service calculates the view model based on that state and presents the view in the UI to the user. Every time user makes a change it results to new commit sha and the service calculates the new state of the UI for that commit sha and renders it. In such system the versions are not needed because we have a deterministic function of commit sha to UI state and an ordering of the commits managed by the client. However if the user makes new commits faster than the service is able to produce results (even when caching and minimal diff based calculations are considered) we would not make any progress. That's what splitting the system into multiple date sources that each produce versioned outputs that can be aggregated together addresses. Some outputs are available faster than others and can produce UI updates sooner. We concluded that CPS needs the version system, but we can encapsulate it and don't need versions to be used for everything in the entire cloud service. Exposing evaluation results and design time build results separately as the original proposal above indicates would need to merge the results of these computations based on the versions. We need a guarantee that F5 blocks launching until DTB of all projects in the cone of startup project is complete and Roslyn notified. |
@davkean @heejaechang Does the above comment summarize what we discussed or am I missing anything? |
@tmat: regarding API, you shouldn't be looking at IWorkspaceProjectContext as an example of the API; look at VisualStudioProject. That's the API that is intended to go public and cleans up a bunch of warts. IWorkspaceProjectContext is just a hacked up shim forwarding to the better code at this point. For example, the AddProjectReference/RemoveProjectReference switches to taking a ProjectId which is trivially remotable.
The only reason that code takes an IVsHierarchy is to:
When I rewrote all of this I was very careful that when that hierarchy comes in it goes straight to the VisualStudioWorkspace to store it, and nothing in the actual implementation of the project stuff itself touches (or even holds) the IVsHierarchy. As much as I'd love to not touch IVsHierarchy at all, other things in VS would need to change before we can remove it from the VS layer. An appropriate refactoring can of course let us move things further down. |
I don't think this is compatible with what we are trying to do here. VisualStudioProject can't be made public. It actually needs to not exist eventually.
Can you file issues on what needs to be changed? |
Almost nothing of VisualStudioProject is actually tied to VS; if you want to refactor some of it that's easy for us to do. We just didn't have an ask; now we have one.
It'd be bugs on at least six or seven different teams. We should track it somewhere....I'm not sure a bug per se is going to cut it though. Is there some other all-up tracking mechanism for this? |
I'd start by filing the bugs in Roslyn repo, so we can track them here (tag with label |
WIP Proposal
Project System:
Roslyn:
The text was updated successfully, but these errors were encountered: