Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfa9fa49

Browse files
authored
Add DesignTimeBuild=true to legacy build from ProjectSystem (dotnet#4407)
* Add DesignTimeBuild=true to legacy build from ProjectSystem* update tests
1 parent3f42446 commitfa9fa49

File tree

7 files changed

+42
-25
lines changed

7 files changed

+42
-25
lines changed

‎vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs‎

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2182,15 +2182,15 @@ internal virtual void BuildAsync(uint vsopts, ConfigCanonicalName configCanonica
21822182
/// Do the build by invoking msbuild
21832183
/// </summary>
21842184
[SuppressMessage("Microsoft.Naming","CA1704:IdentifiersShouldBeSpelledCorrectly",MessageId="vsopts")]
2185-
internalvirtualBuildResultBuild(ConfigCanonicalNameconfigCanonicalName,IVsOutputWindowPaneoutput,stringtarget)
2185+
internalvirtualBuildResultBuild(ConfigCanonicalNameconfigCanonicalName,IVsOutputWindowPaneoutput,stringtarget,IEnumerable<KeyValuePair<string,string>>extraProperties)
21862186
{
21872187
boolengineLogOnlyCritical=BuildPrelude(output);
21882188
BuildResultresult=BuildResult.FAILED;
21892189

21902190
try
21912191
{
21922192
this.SetBuildConfigurationProperties(configCanonicalName);
2193-
result=this.InvokeMsBuild(target);
2193+
result=this.InvokeMsBuild(target,extraProperties);
21942194
}
21952195
finally
21962196
{
@@ -4115,15 +4115,23 @@ internal string GetCurrentOutputAssembly()
41154115
/// </summary>
41164116
internalBuildResultBuild(stringtarget)
41174117
{
4118-
returnthis.Build(newConfigCanonicalName(),null,target);
4118+
returnthis.Build(newConfigCanonicalName(),null,target,null);
4119+
}
4120+
4121+
/// <summary>
4122+
/// Overloaded method. Invokes MSBuild using the default configuration and does without logging on the output window pane.
4123+
/// </summary>
4124+
internalBuildResultBuildWithExtraProperties(stringtarget,IEnumerable<KeyValuePair<string,string>>extraProperties)
4125+
{
4126+
returnthis.Build(newConfigCanonicalName(),null,target,extraProperties);
41194127
}
41204128

41214129
/// <summary>
41224130
/// Overloaded method. Invokes MSBuild using the default configuration.
41234131
/// </summary>
4124-
internalBuildResultBuildToOutput(stringtarget,IVsOutputWindowPaneoutput)
4132+
internalBuildResultBuildToOutput(stringtarget,IVsOutputWindowPaneoutput,IEnumerable<KeyValuePair<string,string>>extraProperties)
41254133
{
4126-
returnthis.Build(newConfigCanonicalName(),output,target);
4134+
returnthis.Build(newConfigCanonicalName(),output,target,extraProperties);
41274135
}
41284136

41294137
/// <summary>
@@ -6512,9 +6520,15 @@ Tuple<uint, int> ResolveAssemblyPathInTargetFxImpl(string[] prgAssemblySpecs, ui
65126520
{
65136521
returnnewTuple<uint,int>(0,VSConstants.E_FAIL);
65146522
}
6523+
65156524
varprojectInstance=this.buildProject.CreateProjectInstance();
6516-
projectInstance.SetProperty("DesignTimeReference",String.Join(";",prgAssemblySpecs));
6517-
BuildSubmissionsubmission=DoMSBuildSubmission(BuildKind.SYNC,target,refprojectInstance,null);
6525+
varextraProperties=newKeyValuePair<string,string>[]
6526+
{
6527+
newKeyValuePair<string,string>("DesignTimeBuild","true"),
6528+
newKeyValuePair<string,string>("DesignTimeReference",String.Join(";",prgAssemblySpecs))
6529+
}.AsEnumerable();
6530+
6531+
BuildSubmissionsubmission=DoMSBuildSubmission(BuildKind.SYNC,target,refprojectInstance,null,extraProperties);
65186532
if(submission.BuildResult.OverallResult!=BuildResultCode.Success)
65196533
{
65206534
// can fail, e.g. if call happens during project unload/close, in which case failure is ok

‎vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,11 @@ public void LoadReferencesFromBuildProject(Microsoft.Build.Evaluation.Project bu
371371
}
372372
}
373373

374-
BuildResultbuildResult=this.ProjectMgr.Build(MsBuildTarget.ResolveAssemblyReferences);
374+
varextraProperties=newKeyValuePair<string,string>[]
375+
{
376+
newKeyValuePair<string,string>("DesignTimeBuild","true"),
377+
}.AsEnumerable();
378+
BuildResultbuildResult=this.ProjectMgr.BuildWithExtraProperties(MsBuildTarget.ResolveAssemblyReferences,extraProperties);
375379
foreach(stringreferenceTypeinSupportedReferenceTypes)
376380
{
377381
boolisAssemblyReference=referenceType==ProjectFileConstants.Reference;

‎vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,8 +1368,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
13681368
// If property is not set - msbuild will resolve only primary dependencies,
13691369
// and compiler will be very unhappy when during processing of referenced assembly it will discover that all fundamental types should be
13701370
// taken from System.Runtime that is not supplied
1371-
1372-
let_= x.InvokeMsBuild("Compile", extraProperties=[KeyValuePair("_ResolveReferenceDependencies","true")])
1371+
let_= x.InvokeMsBuild("Compile", extraProperties=[KeyValuePair("_ResolveReferenceDependencies","true"); KeyValuePair("DesignTimeBuild","true")])
13731372
sourcesAndFlagsNotifier.Notify()
13741373
finally
13751374
actuallyBuild<-true

‎vsintegration/tests/unittests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ type Miscellaneous() =
327327
use project= TheTests.CreateProject(projFile)
328328
letsrcFile=(Path.GetDirectoryName projFile)+"\\"+"foo.fs"
329329
File.AppendAllText(srcFile,"#light\nlet foo () =\n printfn\"A\"\n")
330-
project.BuildToOutput("Build", vso)|> ignore// Build the project using vso as the output logger
330+
project.BuildToOutput("Build", vso,null)|> ignore// Build the project using vso as the output logger
331331
leterrors= List.filter(fun(s:string)-> s.Contains(expectedError))!outputWindowPaneErrors
332332
AssertEqual1(List.length errors)
333333
)
@@ -419,7 +419,7 @@ type Miscellaneous() =
419419
letvso= VsMocks.vsOutputWindowPane(outputWindowPaneErrors)
420420
letsrcFile=(Path.GetDirectoryName projFileName)+"\\"+"foo.fs"
421421
File.AppendAllText(srcFile,"let x = 5\n")
422-
project.BuildToOutput("Build", vso)|> ignore// Build the project using vso as the output logger
422+
project.BuildToOutput("Build", vso,null)|> ignore// Build the project using vso as the output logger
423423
printfn"Build output:"
424424
!outputWindowPaneErrors|> Seq.iter(printfn"%s")
425425
letexpectedRegex=new Regex("\\s*ProjectExt\\[.fsproj\\]")

‎vsintegration/tests/unittests/LegacyProjectSystem/Tests.ProjectSystem.Project.fs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ type Project() =
847847
use project= TheTests.CreateProject(projFile)
848848
letsrcFile=(Path.GetDirectoryName projFile)+"\\"+"foo.fs"
849849
File.AppendAllText(srcFile,"bar");// foo.fs will be cleaned up by parent call to DoWithTempFile
850-
project.BuildToOutput("Build", vso)|> ignore// Build the project using vso as the output logger
850+
project.BuildToOutput("Build", vso,null)|> ignore// Build the project using vso as the output logger
851851

852852
leterrors= List.filter(fun s->(new Regex(expectedError)).IsMatch(s))!outputWindowPaneErrors
853853

@@ -870,7 +870,7 @@ type Project() =
870870
use project= TheTests.CreateProjectWithUTF8Output(projFile)
871871
letsrcFile=(Path.GetDirectoryName projFile)+"\\"+"新規bcrogram.fs"
872872
File.AppendAllText(srcFile,"bar");// 新規bcrogram.fs will be cleaned up by parent call to DoWithTempFile
873-
project.BuildToOutput("Build", vso)|> ignore// Build the project using vso as the output logger
873+
project.BuildToOutput("Build", vso,null)|> ignore// Build the project using vso as the output logger
874874

875875
// The console inserts hard line breaks accumulate the output as a single line then look for the expected output.
876876
letoutput=(!outputWindowPaneErrors|> String.concat"").Replace("\r\n","")

‎vsintegration/tests/unittests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ type UpToDate() =
6060
File.AppendAllText(embedPath,"some embedded resource")
6161

6262
Assert.IsFalse(config.IsUpToDate(logger,true))
63-
project.Build(configNameDebug, output,"Build")|> AssertBuildSuccessful
63+
project.Build(configNameDebug, output,"Build",null)|> AssertBuildSuccessful
6464
Assert.IsTrue(config.IsUpToDate(logger,true))
6565

6666
// None items should not affect up-to-date (unless captured by well-known items, e.g. App.config)
@@ -112,7 +112,7 @@ type UpToDate() =
112112

113113
project.SetConfiguration(config.ConfigCanonicalName);
114114
Assert.IsFalse(config.IsUpToDate(logger,true))
115-
project.Build(configNameDebug, output,"Build")|> AssertBuildSuccessful
115+
project.Build(configNameDebug, output,"Build",null)|> AssertBuildSuccessful
116116
Assert.IsTrue(config.IsUpToDate(logger,true))
117117

118118
for pathin[verPath; keyPath]do
@@ -147,7 +147,7 @@ type UpToDate() =
147147
File.AppendAllText(absFilePath,"printfn\"hello\"")
148148

149149
Assert.IsFalse(config.IsUpToDate(logger,true))
150-
project.Build(configNameDebug, output,"Build")|> AssertBuildSuccessful
150+
project.Build(configNameDebug, output,"Build",null)|> AssertBuildSuccessful
151151
Assert.IsTrue(config.IsUpToDate(logger,true))
152152

153153
// touch proj file
@@ -178,7 +178,7 @@ type UpToDate() =
178178
letconfig1= project1.ConfigProvider.GetProjectConfiguration(configNameDebug)
179179

180180
Assert.IsFalse(config1.IsUpToDate(logger,true))
181-
project1.Build(configNameDebug, output,"Build")|> AssertBuildSuccessful
181+
project1.Build(configNameDebug, output,"Build",null)|> AssertBuildSuccessful
182182
Assert.IsTrue(config1.IsUpToDate(logger,true))
183183

184184
letoutput1= Path.Combine(project1.ProjectFolder,"bin\\debug", project1.OutputFileName)
@@ -197,7 +197,7 @@ type UpToDate() =
197197
letstartTime= DateTime.UtcNow
198198

199199
Assert.IsFalse(config2.IsUpToDate(logger,true))
200-
project2.Build(configNameDebug, output,"Build")|> AssertBuildSuccessful
200+
project2.Build(configNameDebug, output,"Build",null)|> AssertBuildSuccessful
201201
Assert.IsTrue(config2.IsUpToDate(logger,true))
202202

203203
// reference is updated
@@ -241,7 +241,7 @@ type UpToDate() =
241241
File.AppendAllText(appConfigPath,"""<?xml version="1.0" encoding="utf-8" ?><configuration></configuration>""")
242242

243243
Assert.IsFalse(config.IsUpToDate(logger,true))
244-
project.Build(configNameDebug, output,"Build")|> AssertBuildSuccessful
244+
project.Build(configNameDebug, output,"Build",null)|> AssertBuildSuccessful
245245
Assert.IsTrue(config.IsUpToDate(logger,true))
246246

247247
letstartTime= DateTime.UtcNow
@@ -290,25 +290,25 @@ type UpToDate() =
290290
Assert.IsFalse(debugConfigAnyCPU.IsUpToDate(logger,true))
291291
Assert.IsFalse(releaseConfigAnyCPU.IsUpToDate(logger,true))
292292

293-
project.Build(configNameDebugx86, output,"Build")|> AssertBuildSuccessful
293+
project.Build(configNameDebugx86, output,"Build",null)|> AssertBuildSuccessful
294294
Assert.IsTrue(debugConfigx86.IsUpToDate(logger,true))
295295
Assert.IsFalse(releaseConfigx86.IsUpToDate(logger,true))
296296
Assert.IsFalse(debugConfigAnyCPU.IsUpToDate(logger,true))
297297
Assert.IsFalse(releaseConfigAnyCPU.IsUpToDate(logger,true))
298298

299-
project.Build(configNameReleasex86, output,"Build")|> AssertBuildSuccessful
299+
project.Build(configNameReleasex86, output,"Build",null)|> AssertBuildSuccessful
300300
Assert.IsTrue(debugConfigx86.IsUpToDate(logger,true))
301301
Assert.IsTrue(releaseConfigx86.IsUpToDate(logger,true))
302302
Assert.IsFalse(debugConfigAnyCPU.IsUpToDate(logger,true))
303303
Assert.IsFalse(releaseConfigAnyCPU.IsUpToDate(logger,true))
304304

305-
project.Build(configNameDebugAnyCPU, output,"Build")|> AssertBuildSuccessful
305+
project.Build(configNameDebugAnyCPU, output,"Build",null)|> AssertBuildSuccessful
306306
Assert.IsTrue(debugConfigx86.IsUpToDate(logger,true))
307307
Assert.IsTrue(releaseConfigx86.IsUpToDate(logger,true))
308308
Assert.IsTrue(debugConfigAnyCPU.IsUpToDate(logger,true))
309309
Assert.IsFalse(releaseConfigAnyCPU.IsUpToDate(logger,true))
310310

311-
project.Build(configNameReleaseAnyCPU, output,"Build")|> AssertBuildSuccessful
311+
project.Build(configNameReleaseAnyCPU, output,"Build",null)|> AssertBuildSuccessful
312312
Assert.IsTrue(debugConfigx86.IsUpToDate(logger,true))
313313
Assert.IsTrue(releaseConfigx86.IsUpToDate(logger,true))
314314
Assert.IsTrue(debugConfigAnyCPU.IsUpToDate(logger,true))

‎vsintegration/tests/unittests/TestLib.ProjectSystem.fs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ module LanguageServiceExtension =
657657
failwith"tried to build not-yet-created project"
658658
else
659659
lettarget=if target<>nullthen targetelse"Build"
660-
projInfo.Project.BuildToOutput(target,vsOutputWindowPane)|> ignore// force build through project system for code coverage
660+
projInfo.Project.BuildToOutput(target,vsOutputWindowPane,null)|> ignore// force build through project system for code coverage
661661
hooks.BuildHook(projFileName, target, vsOutputWindowPane)// use MSBuild to build and also return MainAssembly value
662662

663663
memberx.GetMainOutputAssemblyHook baseName= hooks.GetMainOutputAssemblyHook baseName

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp