-
Notifications
You must be signed in to change notification settings - Fork 43
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
Potential incompatibility with MSBuild 17.7 #154
Comments
Same here. Happened with versions The mentioned code is:
|
The fix to that is to change that to the following and it will properly copy in both Build and publish again: <Target Name="SetRoslynCompilerFiles" >
<Message Text="Using Roslyn from '$(RoslynToolPath)' folder" />
<ItemGroup>
<RoslynCompilerFiles Include="$(RoslynToolPath)\**\*" />
</ItemGroup>
</Target> After that then this will work properly again: <Target Name="CopyRoslynCompilerFilesToOutputDirectory" AfterTargets="CopyFilesToOutputDirectory" DependsOnTargets="LocateRoslynToolsDestinationFolder;SetRoslynCompilerFiles" Condition="$(RoslynCopyToOutDir) == 'true'">
<Copy SourceFiles="@(RoslynCompilerFiles)" DestinationFolder="$(RoslynToolsDestinationFolder)" ContinueOnError="true" SkipUnchangedFiles="true" Retries="0" />
<ItemGroup Condition="'$(MSBuildLastTaskResult)' == 'True'" >
<FileWrites Include="$(RoslynToolsDestinationFolder)\*" />
</ItemGroup>
</Target> In the mean time I had to do this to try to work around the issue in the .NET SDK though which sadly is not the best way of doing it (best way is fixing the package so I can re-enable to copy from the package itself and not manually do it): <Target Name="FixPublish" AfterTargets="Publish" DependsOnTargets="LocateRoslynToolsDestinationFolder">
<Message Text="The .NET SDK's Web SDK sort of broke publish by placing the build outputs inside of '$(PublishDir)' and refusing to copy roslyn instead of in '$(PublishDir)bin' and '$(PublishDir)bin\roslyn'." Importance="high" />
<Message Text="Which resulted in the need for an after publish target that gets ran in Visual Studio and from 'dotnet publish'." Importance="high" />
<Message Text="I have also filed an issue about it inserting ASP.NET Core stuff in web.config as well even when targeting .NET Framework with the .NET SDK when using the Web SDK and have yet to get a response." Importance="high" />
<Message Text="For more information go to: https://github.com/dotnet/sdk/issues/34595" Importance="high" />
<ItemGroup>
<CustomRoslynFiles Include="$(RoslynToolPath)\**\*" />
</ItemGroup>
<Copy SourceFiles="@(CustomRoslynFiles)" DestinationFolder="$(RoslynToolsDestinationFolder)" ContinueOnError="true" SkipUnchangedFiles="true" Retries="0" />
<!--
Remove the refs folder from the publish output.
This is getting annoying that even with ProduceReferenceAssembly and ProduceReferenceAssemblyInOutDir
set to false that it STILL puts them in the publish directory.
-->
<RemoveDir Directories="$(PublishDir)refs" />
<!-- Move DLL and PDB files to the bin folder. -->
<ItemGroup>
<!-- Include *.dll, *.pdb, and *.config files excluding web.config -->
<WebPublishBinFiles Include="$(PublishDir)*.dll;$(PublishDir)*.pdb;$(PublishDir)*.config" Exclude="$(PublishDir)web.config" />
</ItemGroup>
<Copy SourceFiles="@(WebPublishBinFiles)" DestinationFolder="$(PublishDir)\bin" ContinueOnError="true" SkipUnchangedFiles="true" Retries="0" />
<Delete Files="@(WebPublishBinFiles)" />
</Target> Without this fix it would refuse to do the copy, with the fix it will copy again in both non-SDK style (hopefully) and SDK style. |
@terrajobst Immo, sorry for summoning you here, but maybe we can get a yes/no reply from someone in charge of this library? There's a lot of "old" ASP.NETters using new version of VS =) |
Agreed @onyxmaster messing with external target files doesnt solve the problem and shouldnt be an acceptable fix |
While this is genuine missuse of msbuild and ideally the offending target ( |
@JanKrivanek demoting the message seems fair. Nevertheless I would like the maintainers of this repo to update the code and merge #155 and release new versions fixing the issue itself. |
Also not to mention the offending target is unable to copy the files at all due to the issue and I feel demoting the message would be a mistake instead as it would fail to motivate people to fix the root issue at all. |
@terrajobst @jaredpar Is this something we could please route for the next release? I'm coming across it as well - note fix is pending in #155. |
While this does involve Roslyn it's not a project that I'm a maintainer on. Looks like @StephenMolloy is the active contributor here so would need them to comment.
To be clear: there is no behavior change here. The package is working the same as it did before. The message is calling out a long existing behavior (based on my understanding here). While this is a new message the behavior hasn't changed. Agree a fix would be nice but it doesn't seem critical for the upcoming VS update. |
Yes - this is correct |
Which is odd because on my project the message explains why the compiler files refused to copy to the proper location (bin\roslyn) until my fix is applied (and this is with a .NET Framework ASP.NET project migrated in place to the .NET SDK. Specifically project was initially made with:
And then migrated in place to sdk style csproj. |
Critical? No, it's not critical but I don't see why it being critical should be a requirement for this to be resolved. |
Not sure but I think this is causing issues with our ASP.NET Classic Website-style project. It's annoying at minimum, but it may be causing spurious build issues I can't consistently reproduce when switching git branches where transitive dependencies are different. |
This is another reason why I submitted a patch, it is insane how one must hack together a temporary .NET SDK for projects to an in place upgrade to SDK style of projects just to fix this issue. Which I feel is a hack itself. https://www.nuget.org/packages/Elskom.NetFX.Sdk.Web/ For those who are interested in this temporary solution which also fixes a few other issues I faced when doing an in place migration to SDK style of projects. Feel free to leave feedback here if this helped resolve your issues for now. Also I am tempted to just simply copy the C# code from here and release my own version of this package that:
|
@AraHaan Interesting you have an SDK for this - can you confirm if there is anything in there that is not captured in https://github.com/CZEMacLeod/MSBuild.SDK.SystemWeb which seems to cover most of these issues already. I'm happy to take feedback and PRs for any specific problems. |
You looked at every line in the repository associated with the package I linked above? I find it kinda hard to compare between the 2 SDKs. |
@AraHaan I've scanned through it and I think it mostly matches up with the basics covered in the one I published about 2 years ago. I haven't included the automatic switch to 4.7.0 of the compilers yet (for frameworks that support it), but you can manually select the version number of the compilers package with a single property. |
Warnings no longer show up in VS |
Even Azure team's own .Net Framework example does not run in VS 17.7.7. I've seen that (before changing target file) if doing a CLEAN in Visual studio and then build/rebuild, it generates the Roslyn files in the bin folder, but when running the app the files get's deleted so the app fails because it can't find csc.exe. In order to run this example I had to modify the target file as per @AraHaan comment |
Closing this issue as there is no regression here and the warning was removed in 17.8. |
Ot is still a problem however as there is still no files that gets copied to the expected output location. |
Hi.
After upgrading to the latest VS 17.7, (MSBuild 17.7.2+d6990bcfa) the build of the project that references the NuGet package v4.1.0 emits the following messages:
Should I be worried about this? Maybe this should be fixed?
The text was updated successfully, but these errors were encountered: