我想要一个包含以下内容的解决方案:
我想使用msbuild构建整个解决方案。 另外,我需要在类库的预构建事件中执行实用程序。
将Utility.exe设置为Library.dll的项目依赖项是不好的,因为在构建依赖项目之前,会在 之前调用预构建。
我目前正在考虑在构建整个解决方案之前仅为Utility.exe调用msbuild。是否有更好/更清洁的解决方案?
答案 0 :(得分:1)
一个选择是使用自己的生成过程将utility.exe
生成为单独的应用程序。然后,此版本可以将二进制文件打包为nuget包,并将其存储在nuget存储库中(这可能只是文件共享)
一旦有了可用的软件包,就可以将其作为对library.dll
的nuget引用进行添加,并且在构建过程中还有一个附加步骤,可以在构建步骤之前恢复nuget软件包。然后,您的prebuild事件可以从nuget包文件夹中调用。
答案 1 :(得分:1)
我需要在类库的预构建事件中执行实用程序。
如果要这样做,可以在类库的pre-build事件中调用MSBuild.exe来构建命令行应用程序(Utility.exe),例如:
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" "$(ProjectDir)..\UtilityApplication\UtilityApplication.csproj" /p:Configuration=$(Configuration) /p:Platform=$(Platform)
"$(ProjectDir)..\UtilityApplication\bin\Debug\UtilityApplication.exe"
注意:请不要使用$(SolutionDir)
而不是$(ProjectDir)..\
(您问题的根本原因也与此相关,请让我解释一下。
原因:
解决方案包含项目,但是一个项目可以位于多个不同的解决方案中(或根本没有解决方案),因此我们在单独构建一个项目时无法访问解决方案信息。这就是为什么在构建项目$(SolutionDir)
时无法使用UtilityApplication.csproj
的原因。
这也是导致您出现问题的元凶,因为项目参考信息仅存在于解决方案信息中。因此,如果您通过Visual Studio构建解决方案文件或构建项目,则不会出现问题,在构建依赖项目之后将调用预构建。
希望这会有所帮助。