C# 如何使VisualStudio可靠地运行预构建/编译?
我在基于同一csproj文件使MSBuild和VisualStudio工作时遇到问题 我基本上是在尝试为数据库制作一个安装程序。数据库更改位于另一个目录中的xml文件中。我需要将这些输入程序,然后在运行时通过查询它们来选择要应用的 我的想法是有一个预构建/编译步骤,在我运行程序时,该步骤将压缩目录并将该zip文件作为资源。我也可以在发布脚本中编译资源,但这种方式似乎更好,因为它使调试应用程序更容易 我已将以下内容添加到csproj文件中C# 如何使VisualStudio可靠地运行预构建/编译?,c#,msbuild,visual-studio-2013,C#,Msbuild,Visual Studio 2013,我在基于同一csproj文件使MSBuild和VisualStudio工作时遇到问题 我基本上是在尝试为数据库制作一个安装程序。数据库更改位于另一个目录中的xml文件中。我需要将这些输入程序,然后在运行时通过查询它们来选择要应用的 我的想法是有一个预构建/编译步骤,在我运行程序时,该步骤将压缩目录并将该zip文件作为资源。我也可以在发布脚本中编译资源,但这种方式似乎更好,因为它使调试应用程序更容易 我已将以下内容添加到csproj文件中 <Target Name="PreBuildStep
<Target Name="PreBuildStep">
<ItemGroup>
<Patches Include="..\..\Database\**\*" />
</ItemGroup>
</Target>
<Target DependsOnTargets="PreBuildStep" Name="BeforeBuild" Inputs="@(Patches)" Outputs="Resources\database.zip">
<Exec Command="7z.bat a Resources\database.zip ..\..\Database -tzip" />
</Target>
这在从MSBuild运行解决方案或项目时有效。增量构建参数(输入+输出)似乎也起作用-如果我修改输入,它会重新创建输出,如果我不修改,它不会。同样,如果我删除输出文件,它会重新创建它
我刚刚在路径上添加了一个批处理文件以获取7z.bat-所做的只是调用7zip命令行(7z.exe)
问题是VisualStudio似乎没有运行MSBuild,而且似乎不可能让它可靠地运行任何东西—我还尝试过重写构建的依赖项并使用预构建事件,所有这些行为都是相同的
基本上,它偶尔会工作,但如果我删除输出文件,然后点击F5(调试已在配置管理器中选中了build),甚至点击ctrl+shift+b进行构建,那么它就不会被重新创建。如果我做了一个重建或清理和建设,然后它的工作预期
有人知道如何让它工作吗?我应该报告的是VisualStudio中的一个bug吗?感觉VisualStudio不会调用MSBuild,除非它确定代码发生了一些更改。VisualStudio使用一种称为“快速更新检查”的功能来确定是否必须重新生成项目。原因是优化。此过程比实际运行msbuild增量生成更快 要对特定项目禁用此功能,请将以下属性添加到项目文件中:
<PropertyGroup>
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
真的
当您点击F5
时,VS将在运行前检查是否生成。在您的场景中,VS无法正确地确定它,因为您正在使用定制的预构建步骤(但它应该在第一次运行时就正确地完成所有操作,对吗?)。如果某些内容发生了超出范围的更改,您可以始终使用“全部生成”选项。@Sinatr是的,看起来就是这样。我能理解他们为什么不使用过时的MSBuild定义——它们与源代码管理不太适合——如果您重新更新,那么通常未版本化的输出将比版本化的输入更新。看起来它基本上阻止了定制构建步骤在VS中正常工作。更进一步,似乎属性必须在项目文件本身中定义,而不是在导入的目标文件(VS2013 Express)中定义。我将其放置在for标记中,现在它似乎可以工作了(MSVS 2013)。