我有一个单独的数据库项目,我想在同一个解决方案中构建,然后引用创建的dacpac。当我尝试添加数据库项目时,它构建正常,并且dll被添加到辅助项目文件中,但dacpac不是。
有没有办法让dacpac通过msbuild复制到我的主项目中?我一直认为应该有一种方法来修改sqlproj文件或csproj文件,以便将dacpac作为项目输出之一包含在内。我对msbuild的了解并不广泛,我无法弄明白。
在我看来,我需要以某种方式添加dacpac来说'@(ReferenceCopyLocalPaths)'项目,但我无法弄明白。任何提示或建议将不胜感激。
我尝试做一些类似于MSBuild - ItemGroup of all bin directories within subdirectories所引用的内容:
<Target Name="AfterBuild">
<Message Text="@(MainAssembly)" />
<!--<DacPacs Include="%(ProjectReference.Directory)**" />-->
<ItemGroup>
<DacPacs Include="%(ProjectReference.Directory)**/*bin*/*.dac" />
</ItemGroup>
<Message Text="@(ReferenceCopyLocalPaths)" />
<Message Text="DacPacs: @(DacPacs)" />
<Message Text="Target Database: $(TargetDatabase)" />
</Target>
,它不为DacPacs提供任何内容(添加通配符时)。此外,我尝试引用sqlproj文件中的一个项目组,但它是空的:
答案 0 :(得分:1)
在项目属性中,您可以添加预构建事件命令行以获取dacpac文件的副本。
或者你可以在csproj中添加它:
<PropertyGroup>
<PreBuildEvent>copy "$(SolutionDir)DatabaseProject\bin\$(ConfigurationName)\DatabaseProject.dacpac" "$(ProjectDir)\DatabaseProject.dacpac"</PreBuildEvent>
</PropertyGroup>
这仅在首先构建数据库项目时才有效,因此您应该添加依赖项。在解决方案上右键单击并选择Project Dependencies...
,然后选择主项目并检查它是否依赖于数据库项目。
答案 1 :(得分:0)
将此添加到您的csproj:
<ItemGroup>
<Content Include="..\DatabaseProject\bin\Debug\DatabaseProject.dacpac">
<Link>DatabaseProject.dacpac</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>