Notifications
Announcements
No record found.
I'm interested in developing an ISV solution, but I'm concerned that someone could just copy the model source and drop it wherever they want.
The solution is primarily X++ but has some C# too if that matters.
Is there a standard or common method of protecting (or concealing?) the X++ source code in some way?
You can distribute your solution as a deployable package and thats what most of the ISV's do and preferable way as well. In that way whoever installs it they dont have your source code. A deployable package does NOT contain the source code, they contained binaries (DLL) created by building the source code
In addition to comments from Sukrut, take a look at link below on how you can protect your codebase and manage it via licensing.
docs.microsoft.com/.../isv-licensing
Excellent info! Thanks so much!
As a downside, your customer can't debug your code, and has difficulties extending it (they have to do it "blind", not seeing inside your methods).
Depending on the complexity of your solution, it might or might not be a problem. Think about working with and extending D365FO without seeing the source code.
Hypothetically, if I wanted to reveal all of the source code, how would "deliver" the ISV then? I thought deployable packages were the suggested vehicle, which are just the binaries...or can you also create a deployable package with source code?
You make a good point though...I want the customer to see some code and be able to extend some things. Could I somehow deliver 2 packages...one closed and one open?
You can deliver models and a deployable package. By default the ADO build pipeline creates both. You can also publish parts of your solution as binary/dll (such as license code and config keys) and parts as models.
In all cases the customer should add your solution in their ADO and build one deployable package that contains all their custom code and ISV solutions.
I haven't yet seen what files ADO actually creates, so using my imagination some. Let's see if I follow what you're saying.
I would separate my solution into two models (ex. MyModelOpen & MyModelClosed), my ADO build process would dump out those 2 models and 2 deployable packages (MyModelOpenPackage & MyModelClosedPackage), then I deliver MyModelClosedPackage + MyModelOpen?
And the customer takes the open model + closed deployable package and their ADO process rolls all that into a single deployable package somehow?
With default settings, the build produces a deployable package that has all your code, and a zip file that has all your models.
You can set up the pipeline to exclude package(s) from the deployable package. And you can manually remove models from the model zip.
So, you can ship a deployable package that contains your package A, and ship model of package B.
I've blogged about build pipelines, the post might contain interesting info for you: community.dynamics.com/.../working-with-build-pipelines-build-definitions
Customers can add models to ADo, as well as ISV binaries (deployable packages): docs.microsoft.com/.../manage-runtime-packages
The build wraps the built models, and ISV binaries into one deployable package which your customer installs in their test/prod.
Under review
Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.
As AI tools become more common, we’re introducing a Responsible AI Use…
We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…
These are the community rock stars!
Stay up to date on forum activity by subscribing.
Martin Dráb 646 Most Valuable Professional
André Arnaud de Cal... 529 Super User 2025 Season 2
Sohaib Cheema 285 User Group Leader