新的.csproj格式包括对经典文件的一些重大改进,包括与NuGet包管理的紧密集成以及明显不那么冗长的结构。我希望在使用.NET Framework 4.6和ASP.NET的同时获得这些好处(因为我的项目依赖于尚未生成.NET Core版本的Umbraco)。
最大的挑战似乎是调试体验 - ASP.NET Core项目期望运行dotnet核心应用程序并为IIS实例设置反向代理。这个过程与.NET Framework模型完全不同,我不知道从哪里开始尝试在Visual Studio中设置调试。
有没有办法让这两个项目模型混合使用?
答案 0 :(得分:38)
GitHub上有很多关于支持ASP.NET(非核心)应用程序的新csproj格式的问题。其中一些:
正如您可能已经了解的那样,ASP.NET应用程序尚不支持新的csproj格式。它可以使它工作,但它不会很顺利。
前段时间我尝试用新的csproj格式创建ASP.NET MVC项目,只是为了好玩。我做到了,但我没有玩过很多次。所以了解你的经历会很有趣。
步骤如下:
删除旧的不需要的项目文件:
使用以下内容创建新的MvcApplication.csproj:
$("#div).html(response.data[0])
$("#div).html(response.material)
上面的长包列表包含为默认ASP.NET MVC应用程序添加的默认包。您应该添加应用程序使用的其他包。
不要忘记添加<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>bin\</OutputPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Antlr" version="3.4.1.9004" />
<PackageReference Include="bootstrap" version="3.0.0" />
<PackageReference Include="jQuery" version="1.10.2" />
<PackageReference Include="jQuery.Validation" version="1.11.1" />
<PackageReference Include="Microsoft.ApplicationInsights" version="2.2.0" />
<PackageReference Include="Microsoft.ApplicationInsights.Agent.Intercept" version="2.0.6" />
<PackageReference Include="Microsoft.ApplicationInsights.DependencyCollector" version="2.2.0" />
<PackageReference Include="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.2.0" />
<PackageReference Include="Microsoft.ApplicationInsights.Web" version="2.2.0" />
<PackageReference Include="Microsoft.ApplicationInsights.WindowsServer" version="2.2.0" />
<PackageReference Include="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.2.0" />
<PackageReference Include="Microsoft.AspNet.Mvc" version="5.2.3" />
<PackageReference Include="Microsoft.AspNet.Razor" version="3.2.3" />
<PackageReference Include="Microsoft.AspNet.Web.Optimization" version="1.1.3" />
<PackageReference Include="Microsoft.AspNet.WebPages" version="3.2.3" />
<PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.5" />
<PackageReference Include="Microsoft.CSharp" Version="4.4.1" />
<PackageReference Include="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" />
<PackageReference Include="Microsoft.Net.Compilers" version="2.1.0" developmentDependency="true" />
<PackageReference Include="Microsoft.Web.Infrastructure" version="1.0.0.0" />
<PackageReference Include="Modernizr" version="2.6.2" />
<PackageReference Include="Newtonsoft.Json" version="6.0.4" />
<PackageReference Include="Respond" version="1.2.0" />
<PackageReference Include="WebGrease" version="1.5.2" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Web" />
</ItemGroup>
<ItemGroup>
<Compile Update="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="Web.config">
<SubType>Designer</SubType>
</Content>
<Content Include="Web.*.config">
<DependentUpon>Web.config</DependentUpon>
<SubType>Designer</SubType>
</Content>
</ItemGroup>
</Project>
包,否则您将在Microsoft.CSharp
分配时遇到以下编译错误:
错误CS0656:缺少编译器所需的成员 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
在ASP.NET项目中,ViewBag
被添加为项目的参考。但最好将它作为NuGet包使用。
唯一无法避免的直接引用是Microsoft.CSharp
。
调试项目
当你说调试可能很痛苦时,你是对的。由于Visual Studio不知道它是一个ASP.NET应用程序,因此没有即时的方法来启动调试会话。
我在这里看到了两种可能的解决方案:
一个。使用IIS Express进行调试。
基于IIS Express可执行文件配置调试非常容易。只需创建以下调试配置文件:
对应的launchSettings.json:
System.Web
湾使用IIS进行调试。
在IIS管理器中,创建指向项目目录的应用程序。现在,您可以通过附加到{
"profiles": {
"ASP.NET Old csproj": {
"commandName": "Executable",
"executablePath": "c:\\Program Files\\IIS Express\\iisexpress.exe",
"commandLineArgs": "/path:\"$(SolutionDir)$(ProjectName)\" /port:12345"
}
}
进程来调试您的应用程序。
这是Sample Project on GitHub。它基本上是默认的ASP.NET MVC项目,按照上述步骤迁移到新的csproj格式。它可以编译,执行和调试(包括IIS Express的配置文件)
答案 1 :(得分:0)
对此,我正在关注this github issue,发布的最新评论添加了最后遗漏的部分。基本上是这样的.csproj文件:
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<OutputType>Library</OutputType>
<OutputPath>bin\</OutputPath>
<TargetFramework>net48</TargetFramework>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<PublishProfileImported>true</PublishProfileImported>
</PropertyGroup>
<ItemGroup>
<ProjectCapability Include="DotNetCoreWeb" />
<ProjectCapability Include="SupportsSystemWeb" />
</ItemGroup>
<!-- add your packagereference/content/etc includes here -->
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<!-- order is important! -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />
</Project>
一切正常!
唯一似乎仍然缺少的是右键单击部署功能...但是,由于可以使用msbuild /p:DeployOnBuild=True
进行部署,因此我最终再也看不到任何阻碍我升级的内容。