Visual studio 2012 如何将MSBuild中SQL Server数据工具项目文件的模型存储更改为内存
我遇到了MSBuild运行VS 2012的SSDT的问题,我在用于运行属性的子树生成的.proj中强制了该问题:Visual studio 2012 如何将MSBuild中SQL Server数据工具项目文件的模型存储更改为内存,visual-studio-2012,tfs,msbuild,sql-server-data-tools,Visual Studio 2012,Tfs,Msbuild,Sql Server Data Tools,我遇到了MSBuild运行VS 2012的SSDT的问题,我在用于运行属性的子树生成的.proj中强制了该问题: 11.0 当它执行时,使用命令行中的msbuild在“Developer Command Prompt for 2012”cmd窗口的本地运行良好。但是,在TFS生成期间,MSBuild将发出生成的随机.sqlproj的问题: C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.T
11.0
当它执行时,使用命令行中的msbuild在“Developer Command Prompt for 2012”cmd窗口的本地运行良好。但是,在TFS生成期间,MSBuild将发出生成的随机.sqlproj的问题:
C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(513):进程无法访问文件“D:\Builds\…\Sources\obj\…\Release\Model.xml”,因为另一个进程正在使用该文件。
(想象一下还有其他一些目录路径,我为了隐私而剪掉了这些路径)
除了通过传递msbuild/m:1
以限制为一个“CPU”来降低生成性能之外,我还可以尝试避免SqlBuildTask
在执行结束时创建的Model.xml
文件上的争用,如何避免此问题?我曾尝试在线查找详细信息,但MSDN和搜索引擎未能找到与sqlpackage.exe参数相当的内容,Storage=Memory
,这表明它没有生成Model.xml
文件,而是使用内存
作为参考,我正在从我的构建生成一个.dacpac输出,这样我可以使用它在以后发布到任何数据库并将其升级到最新版本(在命令行上使用前面提到的sqlpackage.exe和
/a:publish
命令)。我发现以下MSDN文章对解决此问题很有用:
在我的项目文件中,我有以下内容(在这里剪掉不相关的部分,例如ItemGroup
中的项目中的文件):
现在要做的是将Model.xml重定向到
D:\Builds\…\Sources\obj\…\Debug\AnyCPU\FooDatabase
目录,其中FooDatabase
是数据库项目中的Name
属性。现在,我不需要将MSBuild更改为使用BuildInParallel
设置为False等。是sql任务的输出,列为您以后的targetsNo的输入,但我想我将尝试研究如何设置obj输出目录。我可以通过将其更改为不在特定于项目的中间输出目录之上的一个目录来修复此问题。
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Import Project="$(DepotRoot)\internal\infrastructure\build\BuildDbProj.prop" />
<PropertyGroup>
<Name>FooDatabase</Name>
</PropertyGroup>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="Build.prop" />
<PropertyGroup>
<OutputPath>$(FullOutputPath)Databases\$(Name)\</OutputPath>
<IntermediateOutputPath>$(FullIntermediateOutputPath)\$(Name)</IntermediateOutputPath>
<DeploymentPath>$(FullOutputPath)Deployment\DB\$(Name)\</DeploymentPath>
<DeploymentContentPath>$(DeploymentPath)Content\</DeploymentContentPath>
</PropertyGroup>
</Project>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BranchRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), branch.root))\</BranchRoot>
<BranchingFolderStructure>$(BranchRoot.Replace($(DepotRoot)\internal\, ``))</BranchingFolderStructure>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)' == ''">$(DepotRoot)\obj\$(BranchingFolderStructure)</BaseIntermediateOutputPath>
<FullIntermediateOutputPath Condition="'$(FullIntermediateOutputPath)' == ''">$(BaseIntermediateOutputPath)$(Configuration)\$(Platform)</FullIntermediateOutputPath>
</PropertyGroup>
</Project>