Deploying Dynamics 365 Web Resources with Visual Studio
The Dynamics 365 development tooling landscape has shifted significantly since the early VS 2017 days. While Jason Lattimer’s original D365DeveloperExtensions extension is no longer actively maintained, modern alternatives have emerged that handle web resource deployment more reliably. This guide covers current approaches and best practices for streamlining web resource workflows in Visual Studio.
Modern Alternatives to Legacy Extensions
Rather than relying on unsupported community extensions, consider these current options:
Microsoft Power Platform Tools for Visual Studio — Microsoft’s officially supported extension for Visual Studio 2022 and later provides integrated Dataverse deployment capabilities. This is the recommended path forward for new projects.
Command-line tooling via Power Platform CLI — The Power Platform Command Line Interface (CLI) offers scriptable, version-controlled deployment workflows without IDE dependency. This approach integrates better with modern CI/CD pipelines.
Dataverse DevOps Tools — Purpose-built for automated deployments, particularly useful for team environments where consistency matters.
Why Legacy Extensions Became Problematic
Third-party extensions targeting early VS versions accumulated technical debt:
- Visual Studio’s extension API changed between versions, breaking compatibility
- Dataverse authentication methods evolved (OAuth flows replaced older credential handling)
- Managed vs. unmanaged component handling became more restrictive
- Active Directory authentication changed with modern tenant configurations
Attempting to patch legacy extensions (like the modified VSIX files circulating online) introduces security risks and creates unsupported environments that complicate troubleshooting.
Setting Up Web Resource Deployment with Power Platform CLI
This is the modern approach most teams use today:
First, install the Power Platform CLI:
npm install -g @microsoft/powerplatform-cli
Authenticate with your Dataverse environment:
pac auth create --url https://your-org.crm.dynamics.com
Deploy a web resource:
pac solution publish --path ./solutions/your-solution
pac webresource upload --path ./src/webresources/myScript.js --solution-name YourSolution
Workflow: Local Development to Deployment
Create a structured project layout in Visual Studio:
MyProject/
├── src/
│ ├── webresources/
│ │ ├── scripts/
│ │ │ └── myScript.ts
│ │ └── styles/
│ │ └── style.css
│ └── plugins/
└── solutions/
└── YourSolution/
For TypeScript development (recommended over plain JavaScript for larger projects):
npm install typescript --save-dev
npx tsc src/webresources/scripts/myScript.ts --outDir dist/
Deploy the compiled JavaScript:
pac webresource upload --path ./dist/myScript.js --web-resource-name new_myscript
Syncing Solutions Between Environments
Modern approaches avoid manual file mapping. Instead, use source control as your source of truth:
- Export solution from target environment (unmanaged)
- Extract solution (convert to managed format)
- Commit to Git repository
- Pull latest in Visual Studio
- Deploy via CLI with environment variables for different org URLs
Example deployment script (deploy.sh):
#!/bin/bash
ORG_URL=$1
SOLUTION_NAME="YourSolution"
pac auth create --url "$ORG_URL" --username "$ADMIN_USER"
pac solution upload --path ./solutions/$SOLUTION_NAME
pac solution publish --name "$SOLUTION_NAME"
Publishing Only Changed Resources
Instead of publishing entire solutions repeatedly, target specific web resources:
pac webresource upload --path ./dist/myScript.js --web-resource-name new_myscript
For unmanaged solutions, this deploys instantly without waiting for solution publishing cycles.
Team Environment Considerations
Multiple developers should avoid shared extension installations. Instead:
- Share a
package.jsondefining CLI versions - Use VS Code with the official Power Platform Tools extension (superior to VS 2017 legacy options)
- Implement pre-commit hooks to prevent incompatible commits
- Store deployment credentials in environment variables, never in version control
export POWERPLATFORM_USERNAME="admin@org.onmicrosoft.com"
export POWERPLATFORM_PASSWORD="your-password"
pac auth create --url https://org.crm.dynamics.com
Managed vs. Unmanaged Components
Clarify your deployment strategy:
- Unmanaged: Use during active development; quick turnaround for testing
- Managed: Use for production; provides version control and dependency tracking
The modern CLI handles both seamlessly without the artificial restrictions of older extensions.
Troubleshooting Deployments
If web resources don’t appear immediately after deployment:
- Verify the web resource name matches exactly (case-sensitive)
- Check browser cache — hard refresh (Ctrl+Shift+R)
- Confirm the user account has component ownership permissions
- Review Dataverse audit logs for deployment errors
- Test in an incognito window to rule out local caching
Moving away from unmaintained Visual Studio extensions eliminates a whole category of support headaches and aligns your development practice with how most enterprises handle Dynamics 365 customization in 2026.

hey james, seems like after the discontinuation (1 year after the deprecation) of the org service, i’m now getting “fcb ‘enable regional disco’ is disabled” error when trying to logging in. Maybe we have to update the login control?
Same here
I am currently maintaining this extension as the ownership was passed on to me after Lattimir removed the extension and deleted his repository. I am currently supporting VS 2015, 2017 and 2019 with plans to support VS 2022 when that is released.
https://github.com/tsharp/D365DeveloperExtensions
https://marketplace.visualstudio.com/items?itemName=tsharp.D365DeveloperExtensions
thank you!! it would be super lovely to have this working again.